I token CSRF vengono utilizzati molto .
Il server imposta un token nel cookie per quel dominio che (1) include nel modulo HTML o (2) Javascript può leggere e includere nella richiesta. Il server verifica che il token nella richiesta corrisponda al token nel cookie.
Ma perché non controllare semplicemente l'intestazione Origin? Secondo OWASP , è per questo che esiste:
The Origin HTTP Header standard was introduced as a method of defending against CSRF and other Cross-Domain attacks.
"L'origine non è lì? Se no, OK. Se lo è, è uno di cui mi fido (ad esempio la stessa origine)? Se è così, OK."
I token CSRF possono essere fastidiosi. Sono
- più difficile da comprendere per i principianti - "Aspetta ... lo invio due volte? Cos'è di nuovo il CRSF?"
- richiede i cookie (concessi, di solito non è un problema)
- più difficile da implementare - richiede la e visualizzazione del controller
- meno flessibile - non può mai funzionare in più domini
- strano nelle impostazioni non web - "Perché la tua API ha bisogno di un token CSRF?" "Oh, perché anche JS lo usa."
- più ingombrante da implementare globalmente - "Oops, ho dimenticato il tag CSRF qui tra i miei 25 campi del modulo HTML"
Dati questi svantaggi, perché i token CSRF sono così comunemente utilizzati, piuttosto che l'intestazione Origin?