/ TL;DR

SameSite Lax virou default nos navegadores em 2020. Muito desenvolvedor achou que CSRF acabou. Não acabou. Este guia mostra onde CSRF ainda funciona em 2026 e quando SameSite não protege.

Chrome, Firefox e Safari colocaram SameSite=Lax como default em 2020-2021. Isso reduziu CSRF drasticamente. Mas "drasticamente" não é "zerou". Este guia cobre os casos que ainda funcionam.

Onde SameSite não protege

Caso 1: rotas GET que mudam estado

GET /api/logout ainda é atingível via CSRF porque SameSite=Lax permite navegação top-level. Idem para GET /api/subscribe/plan/premium.

Correção: rota que muda estado só aceita POST/PUT/DELETE. Nunca GET.

Caso 2: subdomínios

Se atacante compromete mal.suaempresa.com.br, SameSite não protege — é mesmo site. Cookie vazado.

Correção: cookies críticos com SameSite=Strict + Path restrito.

Caso 3: iframe em app sem X-Frame-Options

Site do atacante embeda seu app em iframe. Se seu app não tem X-Frame-Options: DENY ou CSP frame-ancestors, e o cookie é SameSite=Lax, o iframe faz request com cookie.

Correção: X-Frame-Options: DENY sempre. Ou CSP frame-ancestors 'none'.

Caso 4: fetch com credentials em app cliente comprometido

Se o cliente for comprometido (via XSS), o próprio JS faz o fetch. Nem existe cross-site aqui.

Correção: rota crítica exige reauth ou MFA no momento da ação.

Caso 5: rotas cross-origin explicitamente permitidas via CORS

Se você tem Access-Control-Allow-Credentials: true + Access-Control-Allow-Origin: * (isso é inválido, mas apps fazem sem perceber), CSRF via preflight OPTIONS.

Correção: CORS restrito. Nunca * com credentials.

Camadas defensivas em 2026

  1. SameSite=Strict para cookies de sessão sensíveis.
  2. Token CSRF via cookie double-submit para operações críticas.
  3. Rotas de mutation exigem POST/PUT/DELETE, nunca GET.
  4. X-Frame-Options: DENY universal.
  5. CSP com frame-ancestors 'none'.
  6. Reauth para operações destrutivas.

O que a Varredura testa

Verifica cada endpoint sensível:

  • Aceita GET com efeito colateral?
  • Cookie tem SameSite?
  • Header X-Frame-Options está setado?
  • CSRF token está presente no fluxo?

TL;DR

  • SameSite ajuda, não resolve.
  • 5 casos ainda vazam.
  • Camadas: SameSite Strict + CSRF token + POST-only + X-Frame-Options + reauth.

Rode agora e veja se seu app está coberto.

EV

Equipe Varredura

Time de pesquisa de segurança · Varredura

Sua app em produção passa por essa análise?

Rode uma varredura autônoma em ~60 segundos. Sem cadastro.

Analisar minha aplicação →