È possibile prevenire CSRF controllando le intestazioni di origine e di riferimento? È adeguato, a condizione che le richieste con nessuno dei due siano bloccate?
Espansione delle risposte di @Sjoerd e @lindon.
Origin
vs Referer
vs token CSRF Molto probabilmente, la ragione per cui OWASP consiglia di utilizzare anche un token CSRF è che al momento in cui questa raccomandazione è stata formulata, una parte significativa dei browser non supportava ancora l'intestazione Origin
. Questo non è più il caso, ma le persone sono scimpanzé .
Per preservare la privacy, qualsiasi richiesta del browser può decidere di omettere l'intestazione Referer
. Quindi probabilmente è meglio controllare solo l'intestazione Origin
. (Nel caso in cui si desidera consentire agli utenti di preservare la loro privacy)
L'intestazione Origin
è null in alcuni casi .
Nota che tutte queste richieste sono richieste GET, il che significa che non dovrebbero avere effetti collaterali.
Se ti assicuri che il sito Web dannoso che invia le richieste al tuo browser non possa leggere le risposte, dovresti stare bene. Questo può essere garantito usando le intestazioni CORS appropriate. (Non utilizzare Access-Control-Allow-Origin: *
!)
Per evitare "click-jacking", imposta l'intestazione X-Frame-Options: DENY
. Ciò dirà al tuo browser che non è consentito visualizzare alcuna parte del tuo sito web in un iframe.
L'impostazione delle proprietà del cookie SameSite=lax
o SameSite=strict
impedirà gli attacchi CSRF. Questa è una funzionalità abbastanza nuova e non può essere utilizzata da sola, semplicemente perché non tutti i browser comuni lo supportano ancora. Puoi tenere traccia del supporto QUI .
Quando i browser lo fanno, è probabile che le persone raccomandino comunque di controllare i token Origin / Referer / CSRF. Se lo fanno - senza dare una buona ragione, è probabile perché sono scimpanzé.
Sì, questo è sicuro.
Tuttavia, l'intestazione del referer non è esattamente obbligatoria, quindi potrebbero esserci browser o proxy piuttosto che inviare un'intestazione referer. Ciò significherebbe che questi clienti non possono accedere al tuo sito web.
Con l'introduzione della politica del referrer è possibile rimuovere l'intestazione del referente da una richiesta falsificata. Quindi per proteggersi da CSRF è necessario bloccare qualsiasi richiesta che manchi di un'intestazione di referer (e di origine).
Modifica: questo documento ha alcuni numeri su quale porzione di client omette un header di referer.
OWASP raccomanda di controllare un token CSRF oltre a controllare l'origine e referer.
Leggi altre domande sui tag csrf