web-dev-qa-db-fra.com

Est-il sûr de stocker un JWT dans sessionStorage?

Cet article d'Auth0 recommande de stocker le JWT localement dans un stockage local (ou cookie). Mais cet article de OWASP recommande de ne pas raconter les données sensibles localement (pas même sessionStorage)

Alors, est-il sûr de stocker le jeton JWT localement ou non?

15
Ghassan Karwchan

Comme c'est bizarre! J'ai posé la même question il y a environ un mois.

En fin de compte, nous avons décidé que l'utilisation de localstorage pour le jeton JWT était correcte, tant que nous faisions également ce qui suit au niveau HTTP:

  • Assurez-vous que l'ensemble du site a été diffusé via HTTPS
  • Assurez-vous d'utiliser HSTS
  • Assurez-vous qu'une fois en ligne, seule l'URL de redirection réelle a été incluse dans les règles Auth0, ainsi que notre code source
    • Nous utilisons la Angular CLI. Il s'avère que, malgré les tremblements d'arbre fournis par WebPack, les variables inutilisées apparaissent toujours dans le code source compilé, par exemple localhost:4200
    • Assurez-vous qu'il n'y a pas d'URL localhost réellement sur Auth0 (sur la page de redirection autorisée, pour votre client). Créer un compte Auth0 séparé pour les tests
  • Ajoutez l'en-tête X-Frame-Options à chaque réponse HTTP et définissez-le sur Refuser
  • Définissez X-XSS-Protection à 1
  • Définissez X-Content-Type-Options à nosniff
  • Assurez-vous que Content-Security-Policy est limité à votre propre nom de domaine et à tous les CDN dont vous tirez des scripts
  • Définissez Referrer-Policy à même origine
  • Limite de l'expiration JWT sur Auth0 à 1 heure

Ce qui précède vous donnera un A/A + sur securityheaders.io , et empêchera les attaques les plus courantes (quelqu'un incorporant votre site Web dans un iframe et extrayant des données de localstorage, par exemple).

18
JMK

En fait ça dépend. Si vous avez une vulnérabilité XSS dans votre application, un attaquant peut extraire et utiliser le JWT de votre stockage local.

Une méthode que j'ai utilisée et je pense qu'Auth0 indique est d'utiliser le cookie comme stockage JWT et d'utiliser les indicateurs HTTP uniquement et sécurisé de cette façon si vous avez une vulnérabilité XSS, le cookie ne peut pas être lu et est uniquement transporté de manière sûre. Le CSRF est moins à risque de nos jours car tous les cadres modernes incluent l'atténuation du CSRF.

Cela signifierait que la validation extrait le JWT du cookie côté serveur pour le valider. Mon opinion personnelle est d'utiliser un cookie comme stockage car CSRF est plus facile à trouver et à atténuer par rapport aux attaques XSS qui ont une grande surface d'attaque.

5
McMatty