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
SameSite=Strictpara cookies de sessão sensíveis.- Token CSRF via cookie double-submit para operações críticas.
- Rotas de mutation exigem POST/PUT/DELETE, nunca GET.
X-Frame-Options: DENYuniversal.- CSP com
frame-ancestors 'none'. - 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-Optionsestá 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.
Sua app em produção passa por essa análise?
Rode uma varredura autônoma em ~60 segundos. Sem cadastro.