Sto sviluppando la protezione CSRF con un token per una delle mie applicazioni. Poiché non c'è spazio per implementare il token in POST o GET o per formare dati, sto pensando di inserirlo in un cookie. È un buon approccio?
L'inserimento del token CSRF in un cookie anziché in un campo modulo o intestazione HTTP è un approccio errato e non funzionerà. La cosa che rende efficace il token CSRF è che (a differenza, ad esempio, di un cookie di sessione) non viene inviato automaticamente su tutte le richieste. Deve essere aggiunto manualmente dalla tua applicazione. Se lo metti in un cookie, verrà inviato automaticamente e quindi perde il suo effetto.
Naturalmente, se si utilizza il pattern di cookie double submit è necessario un cookie. Ma questa è una storia diversa.
viola completamente l'uso di avere un token csrf. Mi spiego perché. ogni volta che una vittima invia una richiesta il suo browser invia automaticamente i cookie associati a quel dominio.so csrf funziona perché il file interrotto invia le credenziali di sessione (se la vittima è loggata) .so se metti il token csrf allora sarà inviato insieme a it.instead si desidera inviare il token csrf in una richiesta POST.
No. Non un buon approccio.
Ciò rende ancora più difficile assicurare che CSRF sia efficace e gestire una sessione divisa (cioè 2 finestre). Inoltre il cookie persiste indipendentemente dal percorso di navigazione (cioè non fornisce la prova dell'origine per la richiesta).
Sono molto confuso dalla tua affermazione che non esiste "nessun posto per implementare il token in POST o GET o formare dati" ma sembra che tu abbia l'accesso richiesto per controllare quali cookie sono distribuiti dall'applicazione.
Il problema con i cookie è che tendono a sovrascriversi a vicenda e, inoltre, possono essere condivisi tra più schede / finestre nello stesso browser. Quindi, ad esempio, un cookie CSRF (mal progettato) potrebbe presentare un difetto di esecuzione come: l'utente accede al sito, viene impostato un cookie CSRF; l'utente controlla la posta elettronica, i clic sul collegamento dannoso; il link si apre in una nuova scheda, hijacks cookie CSRF e token; l'azione dannosa viene eseguita dal server. In alternativa, un utente potrebbe semplicemente aprire due schede e provare a eseguire due azioni diverse in ogni scheda, ma almeno una di quelle azioni sarà probabilmente bloccata dal cookie CSRF, se fosse ben progettata (monouso, bloccata su un azione / utente specifici, ecc.)
Esistono modi per mitigare questi problemi, come il supporto di più token nel cookie contemporaneamente, inclusi un timestamp, un percorso di azione, un nome utente, un valore segreto che solo il server conosce, quindi crittografare tutto nel token CSRF usando AES o un altro algoritmo di crittografia sicuro. Basta essere consapevoli che tutto ciò deve essere progettato perfettamente nel modo giusto, o si avrà un ampio problema CSRF nella propria applicazione, e non si potrebbe nemmeno rendersene conto. Una scelta migliore sarebbe quella di risolvere qualsiasi problema che ti impedisca di inserire il token nei dati dell'URL / modulo per cominciare.
Leggi altre domande sui tag csrf