Q13: Where should JWTs be stored in browser-based applications to prevent XSS and CSRF?

Difficulty:MediumTopic:Browser Security

Browser token storage involves trading off Cross-Site Scripting (XSS) risks against Cross-Site Request Forgery (CSRF) risks:

  • LocalStorage / SessionStorage: Vulnerable to XSS attacks. Any malicious JavaScript running in the domain context can read stored tokens.
  • Standard HTTP Cookies: Vulnerable to CSRF attacks unless protected with proper SameSite flags and anti-CSRF tokens.
  • httpOnly, Secure, SameSite=Strict Cookies: Best Security Standard. httpOnly prevents client-side JavaScript from reading the cookie (mitigating XSS extraction), while Secure forces HTTPS transmission and SameSite mitigates CSRF.
Key Takeaways
  • Never store access or refresh tokens in LocalStorage due to script access XSS risks.
  • Store tokens in httpOnly, Secure, SameSite=Strict cookies or maintain access tokens strictly in memory.