Sappiamo che cookies
con httpOnly
e secure
flag sono immuni a XSS
e vulnerabili a CSRF
attacchi. E allo stesso tempo sappiamo che local storage
è vulnerabile a XSS
, ma può proteggere da CSRF
.
Quindi, cosa succede se li combiniamo in questo modo:
1) Usa il token JWT
di accesso con la proprietà csrftoken nel suo payload e memorizza questo token in httpOnly e secure cookie e
2) Utilizzare csrftoken e memorizzarlo nella memoria locale. Il token JWT e csrftoken vengono inviati a un client con autorizzazione corretta. Il browser invia il token JWT al server su ogni richiesta e l'applicazione passa scrftoken in un'intestazione. Il server verifica se csrftoken di JWT e l'intestazione corrispondono e in caso contrario blocca la richiesta.
Sembra che questo schema ci protegga da entrambi i tipi di attacchi. Il codice dannoso inserito in una pagina non otterrà l'accesso al token JWT (quindi nessun XSS) e il codice malevolo eseguito da un utente esterno al nostro sito non imporrà a questo utente di inviare il suo csrftoken in un'intestazione (quindi, nessun CSRF).
Quindi, mi chiedo se è una buona pratica e usano questo schema nelle applicazioni del mondo reale.