Skip to content

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=Strict para 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.