Todos os artigos

Cookies: como um pequeno pedaço de texto mantém o estado de uma sessão

No Brasil, a LGPD (Lei Geral de Proteção de Dados, Lei 13.709/2018) trata qualquer identificador que permita associar comportamento a uma pessoa — inclusive um ID gravado em cookie — como dado pessoal, mesmo sem nome ou CPF envolvidos. Diferente do RGPD europeu, a LGPD não exige explicitamente um banner de cookies, mas exige uma base legal válida (geralmente consentimento) para cookies de análise e publicidade, o que na prática levou a maioria dos sites brasileiros a adotar banners no mesmo formato dos europeus.

O atributo Secure

O atributo Secure diz ao navegador para enviar o cookie apenas por uma conexão HTTPS criptografada. Sem ele, o cookie pode trafegar em texto puro por HTTP, ficando vulnerável à interceptação em redes não seguras, como o wi-fi público de um shopping ou aeroporto.

O atributo HttpOnly

Um cookie marcado com HttpOnly não pode ser lido via JavaScript (document.cookie). É a defesa mais direta contra roubo de sessão por XSS: mesmo que um invasor consiga injetar um script na página, não conseguirá acessar um cookie de sessão com esse atributo.

O atributo SameSite

O atributo SameSite restringe se um cookie é enviado em navegações entre sites diferentes, e é a principal defesa contra ataques CSRF. Strict bloqueia totalmente o envio entre sites, Lax — o padrão em todos os navegadores modernos — permite em casos como seguir um link, e None remove a restrição, mas exige também o atributo Secure.

Para que serve isso

  • Configurar um cookie de sessão seguro para sua própria aplicação — o padrão em frameworks como o Laravel, muito usado no mercado brasileiro, já define Secure e HttpOnly por padrão nos cookies de sessão.
  • Auditar quais cookies de terceiros o site carrega antes de redigir a política exigida pela LGPD.
  • Diagnosticar por que um cookie não está sendo armazenado ou enviado em certos cenários.

O atributo Partitioned e o futuro sem cookies de terceiros

Como parte da iniciativa CHIPS (Cookies Having Independent Partitioned State), o atributo Partitioned permite que um site incorporado em um <iframe> tenha uma versão diferente do seu cookie para cada site pai que o hospeda, em vez de um único cookie compartilhado entre todos. É um meio-termo entre bloquear totalmente cookies de terceiros — o que quebra widgets legítimos de pagamento ou chat — e o modelo antigo, em que um único cookie publicitário podia rastrear o usuário pela web inteira.

Experimentar a ferramenta