Devo usare un token CSRF per pagina o per modulo?

1

È sicuro utilizzare un token CSRF per modulo sulla mia pagina, ad esempio:

<form>
    <input type="hidden" name="token" vale="<?=$data['login_token'];?>" />"
</form>
<form>
    <input type="hidden" name="token" vale="<?=$data['register_token'];?>" />"
</form>

O dovrei semplicemente usare un token generico per ogni modulo, es:

<form>
    <input type="hidden" name="token" vale="<?=$data['token'];?>" />"
</form>
<form>
    <input type="hidden" name="token" vale="<?=$data['token'];?>" />"
</form>

Tieni presente che aggiornerò il token su ogni richiesta di pagina.

    
posta MisterQuacker 09.05.2016 - 21:08
fonte

2 risposte

3

Come questa domanda menziona, un singolo token casuale non percettibile per sessione è sufficiente .

Quando inizi a generare token per pagina o per modulo, stai semplicemente limitando l'impatto di un token CSRF trapelato. Casi di perdita di gettoni singolari sono bug relativamente rari, ma XSS è ovviamente un vettore comune.

In alcuni casi ha effettivamente senso avere un token CSRF per pagina o per modulo, poiché quando combinato con altre funzionalità di protezione (ad esempio disabilitando Ajax con la direttiva connect-src di CSP) puoi limitare la capacità di un bug XSS di compromettere i token CSRF alla pagina in cui si è verificato l'XSS, supponendo che si assicuri che il token non possa essere riutilizzato altrove.

Alcune persone promuovono la protezione CSRF per pagina o per modulo come un modo per aumentare la sicurezza quando si utilizza un metodo di cookie a doppio invio, ma non penso sia sensato: se si ha un bug che consente di leggere un cookie, devi solo leggere l'ID della sessione.

Il rovescio della discussione è che implementando la protezione CSRF più granulare, aggiungi ulteriore complessità al tuo codice, e ciò aumenta la superficie di attacco e il potenziale per i bug.

Personalmente, rimango con un singolo token per sessione, quindi implemento altri controlli anti-automazione (ad esempio captcha, re-entry della password) in aggiunta a ciò quando necessario per una maggiore sicurezza.

    
risposta data 09.05.2016 - 21:48
fonte
0

Pensa a cosa stai proteggendo: un utente malintenzionato che induce un utente a fare una richiesta che non pensa di fare. In che modo più token diversi nella pagina possono proteggerli più di uno singolo?

    
risposta data 09.05.2016 - 21:10
fonte

Leggi altre domande sui tag