Ho intenzione di utilizzare i token di sincronizzazione per la prevenzione CSRF, ma OWASP consiglia controllando anche le intestazioni di referrer e di origine. Ho cercato di capire la logica corretta per questo, ma i miei esperimenti suggeriscono che non esiste un modo valido per controllare a causa del modo in cui si comporta Firefox.
Firefox non invia l'intestazione di origine per le stesse richieste di origine, cosa che avrei pensato significa che devi consentire a richieste che non hanno un'intestazione di origine. Ho appena sperimentato gli URI di dati e sembra che Firefox non invii l'intestazione di origine da essi, il che significherebbe che un utente malintenzionato può semplicemente indirizzare l'utente a un URI di dati che invia automaticamente un modulo dannoso.
Questo
data:text/html;base64,PGZvcm0gYWN0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBtZXRob2Q9IkdFVCI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiPgo8L2Zvcm0+
è un collegamento a un URI di dati contenente un modulo che viene inviato a example.com.
Quale è il seguente codice base64 codificato:
<form action="http://www.example.com" method="GET">
<input type="submit">
</form>
Quando lo apro in Firefox con la console Web aperta, non viene visualizzata alcuna intestazione di origine o referente.
Cosa mi manca qui? C'è qualche logica che dovrei usare sul server che consentirà attraverso le richieste di FIrefox ma non le richieste malevoli dagli URI di dati?