Crittografare i cookie in ASP.NET

Vorrei criptare i cookies in ASP.NET.

Ho seguito il metodo in questo articolo, ma ha l’inconveniente che si utilizza la riflessione su un metodo interno. Questo ha causato di essere segnalato in una revisione del codice — non è a prova di futuro, come l’implementazione interna può cambiare.

C’è un metodo con la stessa funzionalità, che non richiedono l’utilizzo di crittografia metodi interni?

Sto usando .NET Framework 3.5 SP1 (si Supponga che non posso cambiare versioni di framework)

 

2 Replies
  1. 19

    Perché non usare la crittografia trovato nel Sistema.Di sicurezza.Crittografia per crittografare e decrittografare i cookie di nome e valore quando è sensibile? È possibile scrivere alcune funzioni di utilità per gestire abbastanza facilmente. Esempio di funzioni di utilità:

    private static void SetEncryptedCookie(string name, string value)
    {
        var encryptName = SomeEncryptionMethod(name);
        Response.Cookies[encryptName].Value = SomeEncryptionMethod(value);
        //set other cookie properties here, expiry &c.
        //Response.Cookies[encryptName].Expires = ...
    }
    
    private static string GetEncryptedCookie(string name)
    {
        //you'll want some checks/exception handling around this
        return SomeDecryptionMethod(
                   Response.Cookies[SomeDecryptionMethod(name)].Value);
    }
    • Il metodo interno ho citato aggiunge un po ‘ di casualità per la crittografia in modo che il testo cifrato è diverso ogni volta. Il metodo che hai citato non credo.
    • un encrpytion metodo che dipende in aggiunta casuale di testo per rimanere protetti è, credo, intrinsecamente sbagliata. Qualsiasi macchina robusta chiave o privata basata su chiave di crittografia simmetrica dovrebbe essere sufficiente.
    • eh? Non è consigliabile aggiungere casuale sale quando la crittografia dei dati?
    • i sali sono buoni per la prevenzione della utilizza la forza bruta dell’utente, le password fornite tramite tabelle arcobaleno. Le chiavi del computer e di altri grandi generato le chiavi private non beneficiano di salatura.
    • Vedi il wiki su crytographic salatura en.wikipedia.org/wiki/Salt_(crittografia) per una spiegazione più completa.
    • Implementazione della cifratura è ingannevolmente semplice, ho fatto il porting di google Keyczar per .net il incapsula molto di più, come autenticata di crittografia e la rotazione delle chiavi entrambi sono molto importanti quando si cifrano i cookie.
    • Wow tanta confusione tra l’hashing e la crittografia qui. La salatura viene utilizzato in hashing per impedire tabelle arcobaleno. È raccomandato di crittografia che il primo blocco (dimensione della chiave) è anche casuale, questo è noto come il Vettore di Inizializzazione, questo fa in modo che l’output di un algoritmo di cifratura non è mai lo stesso due volte per la stessa data. In .NETTA la maggior parte dei metodi di crittografia hanno un IV di proprietà che viene inizializzato come casuale, è necessario includere questo anche se in uscita (non ha bisogno di essere tenuto segreto), in modo che si è in grado di decifrare. Che cosa ha bisogno di essere tenuto segreto è il tuo tasti
    • Mi dispiace @Sekhat, non vedo la confusione? C’è qualcosa in quello che ho postato circa la salatura che non è corretto?
    • I sali sono utilizzati quando crittografica di hash qualcosa per rendere l’hash di un po ‘ diverso di quanto non sarebbe senza di essa. Per lo più così gigante di elenchi di valori hash non può essere utilizzato nella ricerca di un valido documento di collisione. Quando la crittografia di valori, come l’OP vuole qui, salatura non è utilizzato. L’equivalente più vicino è l’Inizializzazione di Vettori, che dovrebbe essere casuale e diverso per ogni set di dati separatamente crittografato, non serve uno scopo simile, per prevenire attacchi contro il blocco di cifre. Se la natura dell’attacco è un po ‘ diversa.
    • Quindi, in sostanza quello che ho detto nel mio secondo commento con un lato di riferimento per lo Svi, o è il mio secondo commento mis-che indica qualcosa?
    • Non riesco nemmeno a credere a questa domanda & risposta ha così tanti voti. È possibile crittografare il valore di un cookie, come più ti piace. Ma si sta sicuramente andando ad essere in grado di aggirare tutta la crittografia semplicemente copiando i cookie o cookie di dirottamento.
    • tutto dipende dal perché il cookie sono criptati. Se è così, il contenuto non può essere intesa sul lato client, quindi ciò che compie.
    • Il suo stato di quattro anni, ma è ancora applicabili e di un modo sicuro per crittografare i cookie?
    • dipende dal tipo di algoritmo è l’uso che è possibile la ricerca apart da questo (ad esempio, Quanto è sicura la crittografia AES-256?), ma generalmente parlando, sì, è sicuro se l’algoritmo usato è sicuro e i tasti sono ben protetti.
    • Grazie per questo!! Alcuni suggerimenti: Il GetEncryptedCookie() dovrebbe usare Richiesta cookies. Inoltre, assicurarsi che il crittografato nome del cookie non contengono un segno = in esso. I browser non sembra piacere. Inoltre, nella stessa funzione, si dovrebbe essere la crittografia del NOME.

  2. 33

    Non hai bisogno di rotolare il vostro proprio più.

    .Net 4.5 MachineKey.Protect() e MachineKey.Unprotect().

    Sistema.Web.Di sicurezza.MachineKey

    .Net 4.0 ha MachineKey.Encode() e MachineKey.Decode(). Si deve solo impostare il MachineKeyProtection per ‘Tutti’. Questi sono ormai obsoleti e anche se si dovrebbe usare quelli più recenti, se avete 4.5.

    Nota se si tenta di utilizzare questi in qualcosa di simile a una console app invece di ASP.Net sembra generare una nuova chiave di ogni app, riavviare. Ho solo controllato rapidamente, ma in ILSpy sembra che genera i suoi valori di default se l’applicazione appropriata.impostazione sono mancanti.

    Non sono stato in grado di trovare un non-ASP.Net equivalente.

Lascia un commento