Dans la plupart des applications modernes à page unique, nous devons en effet stocker le jeton quelque part du côté client (cas d'utilisation le plus courant - pour que l'utilisateur reste connecté après un rafraîchissement de la page).
Il y a un total de 2 options disponibles : Web Storage (stockage de session, stockage local) et un cookie côté client. Ces deux options sont largement utilisées, mais cela ne signifie pas qu'elles sont très sûres.
Tom Abbott résume bien la Sécurité de JWT sessionStorage et localStorage :
Le stockage Web (localStorage/sessionStorage) est accessible par JavaScript sur le même domaine. Cela signifie que tout JavaScript s'exécutant sur votre site aura accès au stockage Web, et de ce fait, le stockage Web est accessible à tous. peut être vulnérable aux attaques de type "cross-site scripting" (XSS) . En résumé, XSS est un type de vulnérabilité dans lequel un attaquant peut injecter du JavaScript qui s'exécutera sur votre page. Les attaques XSS de base tentent d'injecter du JavaScript par le biais d'entrées de formulaire, où l'attaquant met <script>alert('You are Hacked');</script>
dans un formulaire pour voir s'il est exécuté par le navigateur et peut être consulté par d'autres utilisateurs.
Pour éviter les XSS, la réponse commune est d'échapper et de coder toutes les données non fiables. React le fait (presque) pour vous ! Voici un excellent discussion sur le degré de protection contre les vulnérabilités XSS dont React est responsable. .
Mais cela ne couvre pas toutes les vulnérabilités possibles ! Une autre menace potentielle est l'utilisation de JavaScript hébergé sur des CDN ou des infrastructures externes .
Voici encore Tom :
Les applications web modernes incluent des bibliothèques JavaScript tierces pour les tests A/B, l'analyse des entonnoirs et du marché, et les publicités. Nous utilisons des gestionnaires de paquets comme Bower pour importer le code d'autres personnes dans nos applications.
Et si un seul des scripts que vous utilisez est compromis ? Un JavaScript malveillant peut être intégré à la page, et le stockage Web est compromis. Ces types d'attaques XSS peuvent obtenir le stockage Web de toute personne qui visite votre site, à son insu. C'est probablement la raison pour laquelle un grand nombre d'organisations conseillent de ne pas stocker d'éléments de valeur ou de ne pas faire confiance à des informations dans le stockage Web. Cela inclut les identifiants de session et les jetons.
Par conséquent, ma conclusion est que, en tant que mécanisme de stockage, le stockage Web n'applique pas de normes de sécurité pendant le transfert . Quiconque lit Web Storage et l'utilise doit faire preuve de diligence raisonnable pour s'assurer qu'il envoie toujours le JWT par HTTPS et jamais par HTTP.
7 votes
Préférer le stockage des sessions
19 votes
"Ne pas stocker les jetons dans le stockage local" - Auth0
5 votes
"Il est recommandé de ne pas stocker d'informations sensibles dans le stockage local." -OWASP "les stocker en mémoire sans aucune persistance" -Auth0
7 votes
Je pense que Auth0 a peut-être changé de point de vue à ce sujet - parce que je ne trouve pas la citation ci-dessus dans le lien fourni
2 votes
Pour être juste, @DauleDK, je pense que cette citation particulière est manquante non pas parce que Auth0 pense maintenant qu'il est sûr de le faire, mais plutôt le contraire -- Si vous lisez cette page, il apparaît maintenant qu'ils conseillent que le jeton ne soit jamais persistant dans une solution uniquement côté client, quelle que soit la technique de persistance utilisée : "Si vous avez un SPA sans serveur backend correspondant, votre SPA devrait demander de nouveaux tokens lors de la connexion et les stocker en mémoire sans aucune persistance. Pour effectuer des appels d'API, votre SPA utiliserait alors la copie en mémoire du jeton."
1 votes
C'est un point juste @NotTheDr01ds - si le stockage de JWT's dans un SPA doit être pris en compte. Mais la vraie question semble être de savoir si des cookies auraient dû être utilisés, comme une meilleure alternative.