Non sono sicuro di essere d'accordo con la premessa che il controllo di referenze e intestazioni di origine sia la migliore difesa. In alcuni casi, mancano entrambe le intestazioni. In questi casi l'unica opzione sicura è bloccare la richiesta, che potrebbe interrompere la funzionalità per alcuni utenti legittimi.
Se questo è ancora il percorso che vuoi intraprendere, OWASP ha un sacco di buone informazioni sugli aspetti tecnici :
- Inizia con l'intestazione di origine e, se manca, utilizza l'intestazione di riferimento.
- Ancora, se nessuno di questi è presente, devi bloccare.
- Confronto URL: s potrebbe sembrare semplice, ma in realtà è una cosa molto difficile da fare. Assicurati che il confronto sia corretto e ad es. che
good.com.evil.com
non passa come good.com
. Questo è solo un esempio, sono sicuro che ci sono più insidie là fuori. Preferibilmente dovresti usare una buona libreria ben testata per questo compito.
- Probabilmente è bene controllare che lo schema sia
http://
o https://
. Non sono sicuro se ci sono degli attacchi che possono essere usati se questo controllo non viene eseguito, ma dio sa quali astuti trucchetti ci sono là fuori con l'URI dei dati: s o cosa no.
Se vuoi altre opzioni, considera i classici come token anti-CSRF o double submit cookies. O per un'API, basta usare un token al portatore nell'intestazione dell'autenticazione.