Cookies, Storage e Sessão
A forma como armazenamos dados no cliente impacta diretamente a segurança das sessões e a privacidade dos usuários.
1. Cookies
Os cookies são o mecanismo padrão para armazenamento de tokens de sessão.
Atributos de Segurança:
- HttpOnly: Impede que o cookie seja acessado via JavaScript (
document.cookie). Protege contra roubo de sessão via XSS. - Secure: Garante que o cookie seja enviado apenas em conexões HTTPS.
- SameSite: Controla o envio de cookies em requisições cross-site.
Strict: Enviado apenas em requisições do próprio site.Lax: Padrão moderno. Protege contra CSRF em requisições POST, mas permite o envio em navegações GET.
✅ Como fazer
- Use cookies
HttpOnly; Secure; SameSite=Strictpara tokens de autenticação.
2. Web Storage (LocalStorage e SessionStorage)
Diferente dos cookies, o Web Storage é acessível por qualquer script no mesmo domínio.
❌ Riscos
- Se sua aplicação tiver uma vulnerabilidade XSS, o atacante pode ler tudo o que estiver no
localStorage. - Jamais armazene segredos, tokens de longa duração ou dados sensíveis de saúde no LocalStorage.
3. IndexedDB
Banco de dados no navegador para grandes volumes de dados. Segue a mesma SOP do Web Storage, mas possui riscos maiores de persistência indevida de dados sensíveis se não houver um processo de limpeza.
4. Session Hijacking e Token Leakage
- Session Hijacking: O atacante rouba o identificador de sessão do usuário e assume sua identidade.
- Token Leakage: Ocorre quando tokens (JWT, API Keys) vazam através de:
- Referrer Headers (vazam na URL).
- Logs de console deixados em produção.
- Erros da aplicação que exibem o payload da requisição.
5. Persistência Indevida
Dados sensíveis devem ser removidos do navegador assim que não forem mais necessários.
- SessionStorage: Dados duram apenas enquanto a aba está aberta.
- LocalStorage: Dados persistem até serem limpos manualmente. Evite para dados médicos.
✅ Como fazer
- Limpe o estado da aplicação e storages no momento do Logout.
- Prefira manter dados sensíveis apenas no estado da aplicação (RAM), sem persistir no disco.