Per iniziare con lo sfondo, questo post è cosa dice Jeff Atwood riguardo ai token CSRF. In questa stessa pagina, continua dicendo:
An even stronger, albeit more complex, prevention method is to leverage server state -- to generate (and track, with timeout) a unique random key for every single HTML FORM you send down to the client. We use a variant of this method on Stack Overflow with great success.
Ma in questo stesso post, Jeff non parla mai di quando e come i token dovrebbero essere aggiornati.
Stavo usando una tecnica simile in un'app web su cui stavo lavorando. Funziona così:
- Ogni volta che l'utente metterà
POST
dati sul mio server, verrà inviato un token csrf lungo. - Questo token CSRF è memorizzato in un cookie crittograficamente valido nella sessione dell'utente.
- Se il token è valido, la richiesta dell'utente viene elaborata e viceversa.
- Se la richiesta è valida, elimina il vecchio token sul lato server e crea un nuovo token. La risposta dal server contiene un nuovo token csrf da utilizzare nella richiesta successiva. Il vecchio token su tutti i moduli in una pagina viene aggiornato con quello nuovo in modo che la richiesta successiva venga elaborata correttamente.
È saggio aggiornare i token dopo la richiesta di POST
o l'aggiornamento deve essere fatto solo quando l'utente fa una richiesta di GET
e mantiene lo stesso token fino alla successiva richiesta GET?