Todos os guias
Severidade AltaErros de configuração

CORS mal configurado: as armadilhas do curinga e do reflexo

Cross-Origin Resource Sharing (CORS) controla quais outros sites podem ler as respostas da sua API. Uma política com curinga ou com origem refletida pode deixar qualquer site fazer requisições autenticadas e ler os resultados.

O que é

Os navegadores bloqueiam leituras entre origens por padrão. Os cabeçalhos CORS afrouxam isso de forma seletiva. Access-Control-Allow-Origin: * abre as respostas para todos os sites.

Uma falha mais sutil é o reflexo de origem: o servidor devolve no cabeçalho allow-origin qualquer Origin que a requisição trouxe, o que na prática confia em todo mundo enquanto parece específico.

Por que importa

Se a sua API serve dados de usuários e permite credenciais, uma política CORS ampla demais deixa um site malicioso ler os dados de uma vítima logada direto da sua API.

O reflexo combinado com Access-Control-Allow-Credentials: true é especialmente perigoso — ele anula a proteção de mesma origem que normalmente mantém os dados dos usuários privados.

Como corrigir

Use uma allowlist de origens específicas

Valide o Origin da requisição contra uma lista fixa de domínios confiáveis e só então devolva-o.

const ALLOWED = new Set(["https://app.yourdomain.com"]);
const origin = req.headers.get("origin") ?? "";
const allow = ALLOWED.has(origin) ? origin : "";
// only set the header when allow is non-empty
Nunca combine curinga com credenciais

Os navegadores proíbem Access-Control-Allow-Origin: * junto com credenciais, então às vezes os apps refletem a origem no lugar — e é justamente essa a vulnerabilidade. Use uma allowlist estrita em vez disso.

Por padrão, nenhum CORS

Se um endpoint não precisa de acesso entre origens, não envie nenhum cabeçalho CORS. Abra só as rotas específicas que realmente precisam.

FAQ

Access-Control-Allow-Origin: * é sempre ruim?

Não para recursos realmente públicos e sem credenciais (por exemplo, uma fonte pública ou uma API de dados abertos). É perigoso para qualquer coisa ligada a uma sessão de usuário.

O CORS protege o meu servidor?

Não — o CORS é aplicado pelo navegador, não pelo servidor. Ele governa o que o JavaScript de outros sites pode ler, não se uma requisição chega até você.

Seu app está afetado?

O AppSafe verifica isso e dezenas de outros problemas em um único escaneamento grátis.

Escanear meu app grátis