Verificar cabeçalhos CORS
Este verificador de configuração de cabeçalhos CORS analisa os cabeçalhos de resposta que controlam o acesso entre origens no navegador.
Executar grátis
Cole um bloco de cabeçalhos para confirmar a presença de Access-Control-Allow-Origin, detectar a combinação insegura de origem curinga com credenciais e identificar a ausência de Vary: Origin quando uma origem específica é permitida. O resultado é determinístico e explica cada achado, sendo útil em revisões de implantação, investigação de incidentes, verificações automatizadas e reforço rotineiro de API, sem enviar uma solicitação ao servidor de destino.
Interprete o resultado como uma revisão direcionada
Comece copiando os cabeçalhos de resposta exatamente como foram recebidos pelo navegador ou cliente de linha de comando, com um par Nome: valor por linha. Os nomes são comparados sem diferenciação entre maiúsculas e minúsculas, e valores de Vary separados por vírgulas são tratados como itens individuais. O verificador exige Access-Control-Allow-Origin porque não existe uma política CORS de resposta para avaliar sem esse cabeçalho; portanto, sua ausência gera um erro de entrada, e não um relatório inconclusivo. Um relatório bem-sucedido retorna a origem permitida normalizada, informa se as credenciais estão habilitadas, indica se a resposta varia por Origin e apresenta uma lista ordenada de achados. O campo valid significa que nenhum problema com gravidade de erro foi detectado. Ainda pode existir um aviso, então sistemas consumidores também devem examinar issue_count e issues. Esse escopo restrito é proposital: oferece fatos estáveis sobre dois erros comuns sem alegar que todo o modelo de autorização do aplicativo é seguro. Guarde a resposta original e a origem da solicitação com o resultado quando a verificação fizer parte de uma auditoria.
Entenda origens curinga e solicitações com credenciais
Access-Control-Allow-Origin: * é conveniente para recursos realmente públicos e sem credenciais, pois permite que qualquer origem solicitante leia a resposta. Ele não deve ser combinado com Access-Control-Allow-Credentials: true. Os navegadores rejeitam essa combinação no acesso CORS com credenciais, e a configuração frequentemente revela que o limite de confiança pretendido pelo servidor não foi expresso corretamente. O verificador registra essa combinação como wildcard_origin_with_credentials com gravidade de erro. A correção não é refletir automaticamente todo Origin recebido. Defina quais origens são confiáveis, compare o Origin da solicitação com uma lista explícita de permissões e emita apenas uma origem aprovada após uma correspondência. Se cookies ou outras credenciais ambientais não forem necessários, desative o suporte a credenciais e mantenha a política pública com curinga. Lembre-se também de que CORS controla se scripts do navegador podem ler uma resposta; não é autenticação, autorização, proteção contra falsificação de solicitações nem firewall. Revise separadamente atributos de cookies, controles de autorização, métodos, cabeçalhos expostos e comportamento de preflight antes de considerar o endpoint seguro.
Use Vary: Origin para manter caches compartilhados corretos
Quando um servidor escolhe um valor específico de Access-Control-Allow-Origin conforme o Origin da solicitação, a representação da resposta depende efetivamente desse cabeçalho. Vary: Origin informa a navegadores, proxies reversos e redes de distribuição de conteúdo que respostas produzidas para origens diferentes não podem ser tratadas como equivalentes. Sem ele, um cache pode reutilizar em outra solicitação uma resposta que contém a origem permitida de um locatário, provocando falhas intermitentes e possivelmente enfraquecendo as premissas da política para conteúdo armazenado. Por isso, o verificador emite missing_vary_origin quando a origem permitida é específica e Vary não contém Origin nem o token curinga. Ele aceita Origin em uma linha Vary separada por vírgulas e também em cabeçalhos Vary repetidos. O achado é um aviso porque uma resposta colada não revela se o valor da origem é constante em todas as solicitações ou se o cache está desabilitado em outro ponto. Confirme a lógica real de seleção do servidor e as diretivas de cache antes de alterar a produção. Se a origem for refletida dinamicamente após validação por lista de permissões, adicionar Origin a Vary costuma ser o sinal de cache mais claro e seguro.
Casos de uso
Revisar uma implantação de API
Cole cabeçalhos de uma resposta de homologação e detecte configurações inseguras de credenciais ou variação de cache antes da publicação.
Investigar falhas CORS no navegador
Transforme cabeçalhos capturados em achados explícitos quando uma interface se comportar de modo diferente entre origens ou caminhos de cache.
Automatizar verificações de configuração
Execute blocos determinísticos de cabeçalhos pela API em CI e reprove políticas diante de achados com gravidade de erro.
Perguntas frequentes
Quanto custa a verificação?
A versão do navegador é executada localmente, e cada solicitação à API custa US$ 0,002.
Por que a ausência de Access-Control-Allow-Origin é um erro?
Esse cabeçalho é a base de uma política de resposta CORS. Sem ele, não há valor de origem permitida para este verificador direcionado avaliar.
Access-Control-Allow-Origin: * é sempre inseguro?
Não. Ele é adequado para alguns recursos públicos que não aceitam credenciais. O erro informado exige ao mesmo tempo a origem curinga e as credenciais definidas como true.
Por que a ausência de Vary: Origin é apenas um aviso?
A resposta isolada não mostra se a origem muda entre solicitações nem se um intermediário pode armazená-la. O aviso orienta a verificar esse contexto.
Esta verificação prova que um endpoint é seguro?
Não. Ela verifica dois erros comuns de cabeçalhos CORS. Autenticação, autorização, cookies, preflight, métodos permitidos e proteção contra falsificação exigem análises separadas.
Os nomes dos cabeçalhos diferenciam maiúsculas?
Não. Os nomes dos cabeçalhos HTTP e os tokens relevantes das diretivas são comparados sem diferenciar maiúsculas de minúsculas.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/security/cors-header-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"headers":"Access-Control-Allow-Origin: https://app.example.com\nAccess-Control-Allow-Credentials: true\nVary: Accept-Encoding, Origin"}'const res = await fetch("https://api.kit.forhosting.com/security/cors-header-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"headers": "Access-Control-Allow-Origin: https://app.example.com\nAccess-Control-Allow-Credentials: true\nVary: Accept-Encoding, Origin"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/security/cors-header-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"headers": "Access-Control-Allow-Origin: https://app.example.com\nAccess-Control-Allow-Credentials: true\nVary: Accept-Encoding, Origin"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/security/cors-header-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"headers":"Access-Control-Allow-Origin: https://app.example.com\\nAccess-Control-Allow-Credentials: true\\nVary: Accept-Encoding, Origin"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"headers":"Access-Control-Allow-Origin: https://app.example.com\nAccess-Control-Allow-Credentials: true\nVary: Accept-Encoding, Origin"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/security/cors-header-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"headers": "Access-Control-Allow-Origin: https://app.example.com\nAccess-Control-Allow-Credentials: true\nVary: Accept-Encoding, Origin"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "security.cors_header_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |