È più sicuro memorizzare il valore XSRF all'interno del tuo JavaScript?

3

Per proteggersi da XSRF, devi avere un token separato su una pagina.

Vedi: Coding Horror: Prevenzione degli attacchi CSRF e XSRF, di Jeff Atwood

Come suggerisce il post, è meglio avere quei token in un campo nascosto all'interno del tuo modulo. Ma mi chiedo, se c'è qualche vantaggio nel memorizzarli in una funzione anonima, in modo che il valore venga aggiunto su submit?

Mentre vedo una vulnerabilità nei confronti dell'XSS nel solito approccio, non ci dovrebbe essere modo di inviare un modulo valido nel mio. Se qualcuno controlla il DOM con XSS, i token all'interno dei campi nascosti vengono rivelati facilmente, a meno che non sia una variabile javascript inaccessibile.

    
posta becon999 18.05.2013 - 08:08
fonte

2 risposte

1

Il problema con questo impianto è che il token CSRF non è effettivamente memorizzato all'interno di una funzione anonima. Questo token verrebbe memorizzato all'interno di text che dichiara una funzione anonima. Un carico utile XSS può richiedere questo testo dal server utilizzando un XHR, il token CSRF può essere letto e un altro XHR può essere utilizzato per inviare una richiesta forgiata arbitraria.

Correlati: Spiegazione di worm Sammy , che è un buon esempio di come XSS viene utilizzato per leggere un token CSRF. Inoltre, XSS è possibile senza JavaScript . Ora tieni presente la seguente disuguaglianza:

HTTP Response Splitting > XSS > CSRF > Clickjacking
    
risposta data 18.05.2013 - 11:25
fonte
2

L'unica volta che devi preoccuparti del token letto è se c'è un'estensione malevola o un attacco MITM.

In entrambi i casi, non è più un problema CSRF. Entrambi gli attacchi hanno la capacità di intercettare la richiesta al volo (dopo che il tuo javascript l'ha assemblata con il token) e di modificarla. Questo non è CSRF, ma è ancora un attacco potente. (L'uso di HTTPS risolve alcuni di questi aspetti, anche se si deve presumere che il client non stia installando estensioni dannose)

Se c'è una vulnerabilità XSS da qualche parte, è abbastanza facile chiamare onsubmit() prima di inviarlo.

Quindi non c'è davvero alcuna sicurezza aggiuntiva.

    
risposta data 18.05.2013 - 08:26
fonte

Leggi altre domande sui tag