È sicuro memorizzare un JWT in sessionStorage? [duplicare]

4

Questo articolo di Auth0 consiglia di archiviare il JWT localmente in una memoria locale (o cookie). Ma questo articolo di OWASP consiglia di non pubblicare alcun dato sensibile localmente (nemmeno sessionStorage)

Quindi, è sicuro memorizzare il token JWT localmente o no?

    
posta Ghassan Karwchan 09.02.2018 - 22:00
fonte

2 risposte

8

Che bizzarro! Ho chiesto praticamente la stessa domanda circa un mese fa.

Alla fine, abbiamo deciso che l'utilizzo di localstorage per il token JWT era ok, a patto che avessimo fatto quanto segue anche a livello HTTP:

  • Verifica che l'intero sito sia pubblicato su HTTPS
  • Garantire l'uso di HSTS
  • Verifica che, una volta in diretta, solo l'URL di reindirizzamento effettivo sia stato incluso nelle regole Auth0, nonché il nostro codice sorgente
    • Usiamo la CLI angolare. Si scopre che, nonostante lo shaking dell'albero fornito da WebPack, le variabili non utilizzate appaiono ancora nel codice sorgente compilato, ad esempio localhost:4200
    • Assicurati che localhost URl non sia effettivamente su Auth0 (sulla pagina di reindirizzamento consentita, per il tuo client). Crea un account Auth0 separato per i test
  • Aggiungi l'intestazione X-Frame-Options a ogni risposta HTTP e impostala su Nega
  • Imposta Protezione X-XSS su 1
  • Imposta Opzioni-tipo-contenuto X su nosniff
  • Assicurati che Normativa sulla sicurezza dei contenuti sia limitato al tuo nome di dominio e a eventuali CDN in cui potresti inserire script da
  • Imposta Politica referrer su stessa origine
  • Limita la scadenza JWT su Auth0 a 1 ora

Quanto sopra ti fornirà un A / A + su securityheaders.io e preverrà gli attacchi più comuni (qualcuno che incorpori il tuo sito web in un iframe ed estraendo i dati da localstorage, ad esempio).

    
risposta data 09.02.2018 - 23:45
fonte
1

Beh, dipende. Se si dispone di una vulnerabilità XSS all'interno dell'applicazione, un utente malintenzionato può estrarre e utilizzare il JWT dalla propria memoria locale.

Un metodo che ho usato e penso che Auth0 indichi utilizzare il cookie come memoria JWT e utilizzare i flag Solo HTTP e sicuro in questo modo se si ha una vulnerabilità XSS il cookie non può essere leggere e viene trasportato solo in modo sicuro. Oggi CSRF è meno rischioso in quanto tutti i moderni framework includono la mitigazione CSRF.

Ciò significa che la convalida estrae il JWT dal cookie sul lato server per convalidare. La mia opinione personale è quella di utilizzare un cookie come memoria in quanto CSRF è più facile da trovare e mitigare rispetto agli attacchi XSS che hanno una grande superficie di attacco.

    
risposta data 09.02.2018 - 23:27
fonte

Leggi altre domande sui tag