CSRF in scadenza prima del modulo inviato

7

Ho un modulo web molto lungo che potrebbe richiedere ore per essere completato. Il problema è che quando le persone impiegano troppo tempo il token CSRF scade prima che siano terminate e quando colpiscono submit ottengono un errore 403.

Per risolvere questo problema, sto pensando di fare una richiesta AJAX ogni ora per aggiornare la sessione ed estendere la scadenza del token. Ci sono problemi di sicurezza con questo? O ci sono modi migliori per gestire questa situazione?

    
posta jwerre 01.07.2015 - 13:30
fonte

3 risposte

4

Ci sono assolutamente problemi di sicurezza con questo; altrimenti, il timeout della sessione sarebbe inutile in primo luogo.

Detto questo, ci possono essere buoni motivi per disabilitare i timeout della sessione, ma in questo caso puoi e dovresti farlo esplicitamente, e con il pieno rispetto di tutte le conseguenze.

Per aggiungere alla soluzione: mentre penso che sia già discutibile avere un singolo modulo su una singola pagina web che impiega tanto tempo a compilare senza salvare nel frattempo, con il rischio di perdere tutto il lavoro quando qualcosa va storto (grande problema di usabilità), penso che ciò che si vuole ottenere sia prolungare la sessione (e quindi la validità del token csrf) eseguendo una richiesta ajax ogni tanto quando l'utente è ancora attivo . Pertanto, dovresti monitorare se i campi dei moduli sono stati modificati (ad esempio, negli ultimi 5 minuti) e solo dopo avviare la richiesta Ajax.

    
risposta data 04.04.2016 - 15:15
fonte
2

Non è necessario impostare un tempo di scadenza indipendente per il token CSRF, il token deve essere univoco e valido per la sessione utente corrente, quando la sessione utente scade il token csrf scade insieme alla sessione, quindi devi generare un nuovo token. Questa potrebbe essere una soluzione semplice.

    
risposta data 01.07.2015 - 13:44
fonte
-2

Vedi la risposta di Nicolai Ehemann per una risposta più generale. Questa risposta presuppone che il token venga aggiornato senza allungare la sessione.

Non vedo alcun problema con questo. In pratica, equivale a resettare il token quando l'utente ricarica la pagina. Supponendo che si stia utilizzando https e implementando correttamente la richiesta ajax e la generazione di token, un utente malintenzionato non dovrebbe ancora sapere qual è il token dell'utente.

Gli stessi rischi si applicano come quando si genera normalmente un token CSRF senza ajax, perché per il browser, in pratica sta facendo lo stesso lavoro.

    
risposta data 01.07.2015 - 22:51
fonte

Leggi altre domande sui tag