Ho un'app web in cui, quando gli utenti richiedono una pagina, viene generato un token CSRF
e immesso nella pagina jsp
in un campo input
nascosto.
Lo stesso token viene quindi inviato al server per ogni chiamata AJAX in un'intestazione personalizzata mentre, un token dello stato sessione è contenuto in un cookie ( secure
+ httpOnly
).
Ora, dato che il token CSRF
è qualcosa di nuovo nella webapp, se dopo l'aggiornamento l'utente era già loggato e lui invia una richiesta, un Filter
determinerà che è effettivamente registrato (a causa della sessione -state token nel cookie), ma un token CSRF
valido non è contenuto nell'intestazione personalizzata, quindi il comportamento definito è di disconnetterlo.
Potrei occuparmi di questo, seguendo questo esempio OWASP .
Se non è presente un token CSRF
, ho intenzione di inviare una richiesta NO-CONTENT
indietro e in qualche modo fornire il token.
Ecco il primo dubbio:
Il tag CSRF non deve essere inserito in un cookie ?.
Inoltre forniscono un token CSRF
indietro se manca nella richiesta, il che mi sembra un po 'di anti-secure
: un utente malintenzionato potrebbe aver rubato il token di sessione da cookie
, inviare una richiesta e ricevere magicamente il token CSRF
indietro.
Mi sento quindi confuso qui.
- Devo solo inserire il token
CSRF
nel cookie lungo il token di stato della sessione? - Dovrei evitare di fornire un token
CSRF
se non ne è impostato nessuno, ma esiste un cookie di stato sessione? - Quale può essere una soluzione alternativa per il mio caso?
Note:
Prima di controllare il token CSRF, verifico le intestazioni origin
e referer
, come consigliato qui .
Non ho intenzione di implementare un token CSRF use-only-one-per-request
.
Sebbene irrilevante in questo contesto, la comunicazione avviene tramite HTTPS