Meccanismo anti-CSRF con intestazione referer

3

Questo non è il mio principale meccanismo anti-CSRF; So che le richieste https non hanno un'intestazione referer; So che gli utenti oi firewall possono rimuoverlo o impostare un valore fisso arbitrario.

Intendo questo meccanismo proprio come un possibile ulteriore livello di sicurezza che impedisce CSRF nel caso in cui il mio meccanismo principale venga bypassato per qualche motivo.

Il mio codice sarà qualcosa del tipo:

if(isset($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']))
if(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)!=$_SERVER['HTTP_HOST'])
exit('Anti-CSRF mechanism!');

Penso che questo non abbia problemi di supporto e usabilità. giusto?

    
posta H M 23.03.2013 - 17:42
fonte

2 risposte

7

Sebbene il controllo della intestazione del referer HTTP sia un metodo per mitigare CSRF , questa proposta di implementazione di PHP è aggirata omettendo il referente, che può essere fatto usando una politica di meta referer . Se l'exploit CSRF proviene da un sito HTTPS, il referente sarà assente e questo caso assente non viene controllato nel codice sopra. La mancanza di un referente dovrebbe essere considerato un attacco. Tuttavia, un metodo anti-csrf molto migliore utilizza un token di sincronizzazione.

    
risposta data 23.03.2013 - 18:14
fonte
0

Ci sono modi per perdere le mitigazioni CSRF usando Referer su HTTP. È possibile accedere alla dimostrazione pratica qui: link

Citando i bypass dal link sopra:

Bypasses: GET requests

data: with location= - Chrome / Safari
window.open() - MSIE
data: with meta refresh - Firefox / Opera / Chrome / Safari 

POST requests

data: with meta refresh & form submit - Firefox / Chrome / Safari

Un'opzione migliore potrebbe essere Origin o NoRefferer .

    
risposta data 29.10.2015 - 12:25
fonte

Leggi altre domande sui tag