Um open redirect parece inofensivo — sua app só manda o usuário para algum lugar após o login. Mas se esse "algum lugar" vem de um parâmetro que você não valida, um atacante usa seu domínio confiável como trampolim para a página de phishing dele.

Como funciona

    https://site-confiavel.com/login?next=https://evil.example.com
# Após o login, a vítima aterrissa em evil.example.com

A isca é que o link começa num domínio que a vítima confia. Ela clica, você redireciona, e está num login falso idêntico. Open redirects também são encadeados para roubo de tokens OAuth quando o redirect URI não é validado estritamente.

Como corrigir

  1. Não redirecione para input cru do usuário.
  2. Só rotas relativas. Aceite /dashboard, rejeite qualquer coisa com scheme ou host.
  3. Allow-list de destinos externos.
  4. Valide redirect URIs de OAuth com match exato (sem wildcards).
  5. Cuidado com truques (//evil.com, encoded): valide o resultado parseado, não o string cru.
    const next = url.searchParams.get('next') || '/'
const safe = next.startsWith('/') && !next.startsWith('//') ? next : '/'

O Nurbak escaneia sua app por open redirects e o resto do checklist de segurança de APIs.

Artigos relacionados