Grátis · sem conta

Verificador de cabeçalhos de segurança HTTP

Verifique online os cabeçalhos de segurança HTTP de um site público. Informe um domínio para ver como oito cabeçalhos de segurança essenciais são avaliados na resposta final e, quando exibido, o valor observado.

Uma verificação gratuita das configurações públicas do site. Seu site não é alterado.

Sem cadastro Sem tráfego destrutivo Verificações de sites públicos
Referência de cabeçalhos

O que cada cabeçalho faz e como é avaliado

O verificador lê estes cabeçalhos em uma única resposta. A maioria das linhas é uma verificação de presença: um cabeçalho enviado conta, e o valor aparece quando disponível para que você avalie se ele combina com o seu site.

CabeçalhoO que fazUma boa configuraçãoComo este verificador avalia
Strict-Transport-SecurityFaz os navegadores que voltam ao site mudarem sozinhos para HTTPS, antes que qualquer requisição saia em HTTP sem criptografia.Um max-age longo (180 dias ou mais) depois da fase de implantação; o guia explica as etapas.Ausente em um alvo HTTPS: médio. Não é avaliado quando você informa um endereço http://.
Content-Security-PolicyDá ao navegador uma lista de origens permitidas para o código e o conteúdo da página.Uma política montada a partir dos recursos que suas páginas realmente usam, sem exceções amplas para scripts.Ausente: médio. O valor é exibido, mas não é analisado.
X-Frame-Options · frame-ancestorsImpede que outros sites exibam sua página dentro de um frame deles.frame-ancestors na sua CSP, com X-Frame-Options como reserva para navegadores antigos.Nenhum dos dois: médio.
X-Content-Type-OptionsFaz o navegador confiar no tipo de conteúdo declarado de cada resposta.O valor único nosniff.Ausente ou com outro valor: baixo.
Referrer-PolicyLimita qual parte do endereço da sua página outros sites veem quando visitantes seguem seus links.Uma política no mínimo tão restrita quanto o padrão atual dos navegadores.Ausente: baixo.
Access-Control-Allow-OriginDecide quais scripts de outros sites podem ler suas respostas.Não enviado em páginas comuns, ou indicando uma única origem confiável.Um curinga (*): médio.
Server · X-Powered-ByAnuncia o software por trás da resposta.Removido ou reduzido a um valor genérico.Qualquer cabeçalho Server ou X-Powered-By: baixo, mesmo sem número de versão. Só nomes de tecnologias reconhecidas são exibidos.
Set-CookieDefine cookies; seus atributos decidem quais scripts podem lê-los e quando são enviados.Cookies de sessão escondidos dos scripts e enviados só por HTTPS.Um cookie desta resposta sem HttpOnly, ou sem Secure em HTTPS: médio. SameSite não é verificado e os valores dos cookies nunca são exibidos.

Permissions-Policy e Cross-Origin-Opener-Policy não são avaliados nesta página. O snapshot de prontidão só os conta na nota de blindagem, que é separada.

Como corrigir

Como adicionar esses cabeçalhos no seu servidor

Defina cada cabeçalho em uma única camada que responda a todas as requisições: o servidor web, a CDN ou a plataforma de hospedagem. Comece pelos valores abaixo e endureça-os em etapas enquanto testa suas páginas principais.

Valores iniciais seguros

  1. 01Strict-Transport-Security: max-age=300Envie-o apenas em respostas HTTPS; os navegadores o ignoram em HTTP sem criptografia. Aumente o max-age em etapas, por exemplo para uma semana, um mês e depois um ano (31536000), e verifique o site a cada etapa. Adicione includeSubDomains só quando todos os subdomínios servirem HTTPS, e preload só depois de ler os requisitos do hstspreload.org, porque sair da lista de pré-carregamento leva meses.
  2. 02Content-Security-Policy-Report-Only: default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'Report-Only não bloqueia nada: o navegador relata o que a política bloquearia, no console ou em um endpoint de relatórios, se você adicionar um. Abra suas páginas principais, adicione as origens que elas realmente usam e depois envie a mesma política como Content-Security-Policy. Evite 'unsafe-inline' para scripts; nonces ou hashes são a opção mais rígida.
  3. 03frame-ancestors 'self' · X-Frame-Options: SAMEORIGINframe-ancestors em uma Content-Security-Policy aplicada decide quais sites podem exibir suas páginas em um frame. X-Frame-Options cobre navegadores antigos e faz o bloqueio enquanto sua CSP ainda está em Report-Only. Use 'none' e DENY se suas páginas nunca são incorporadas, mantenha os dois valores alinhados e envie frame-ancestors como cabeçalho, porque os navegadores o ignoram em uma tag meta.
  4. 04X-Content-Type-Options: nosniffEnvie o valor único nosniff em todas as respostas. Os navegadores passam a recusar scripts e folhas de estilo servidos com o Content-Type errado, então verifique antes se o seu servidor identifica corretamente os arquivos JavaScript e CSS.
  5. 05Referrer-Policy: strict-origin-when-cross-originOutros sites recebem apenas a sua origem, nunca o endereço completo da página, e nada quando um link leva de HTTPS para HTTP. Os navegadores atuais já usam esse valor por padrão; enviá-lo mantém o mesmo comportamento em todos eles. Escolha same-origin ou no-referrer se suas URLs carregam dados privados.
  6. 06Permissions-Policy: camera=(), microphone=(), geolocation=()Uma lista vazia () desativa um recurso para a sua página e para cada frame que ela incorpora. Liste só recursos que o seu site nunca usa e depois teste as páginas com mapas, chamadas de vídeo ou widgets de pagamento.

Exemplos prontos para copiar por plataforma

Todos os exemplos definem os mesmos valores iniciais. Plataformas de hospedagem podem já enviar Strict-Transport-Security, por isso os exemplos de Vercel, Netlify e Next.js não o incluem; verifique a resposta real e adicione-o só se estiver faltando.

nginx

Coloque as linhas no bloco server que serve HTTPS. O parâmetro always também as adiciona às respostas de erro. Um bloco location com linhas add_header próprias descarta todas as add_header herdadas do bloco server, então repita o conjunto ali ou mantenha-o em um único arquivo include.

# In the server block that serves HTTPS (listen 443 ssl)
add_header Strict-Transport-Security "max-age=300" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

Apache

Ative o mod_headers e adicione as linhas ao virtual host da porta 443, ou ao .htaccess onde AllowOverride FileInfo estiver ativo. Header always set também cobre respostas de erro e redirecionamentos.

# <VirtualHost *:443> or .htaccess; needs mod_headers (Debian/Ubuntu: a2enmod headers)
Header always set Strict-Transport-Security "max-age=300"
Header always set Content-Security-Policy-Report-Only "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"

Cloudflare

No painel, crie uma Response Header Transform Rule para o seu nome de host e adicione cada cabeçalho com a operação Set static, que substitui um cabeçalho de mesmo nome vindo da sua origem. O HSTS tem uma configuração própria em SSL/TLS, Edge Certificates; use essa configuração ou a regra, não as duas. Os nomes dos menus podem variar de acordo com a versão do painel.

Rule type   Response Header Transform Rule
When        Hostname equals example.com
Then        Set static, one row per header:
  X-Content-Type-Options               nosniff
  Referrer-Policy                      strict-origin-when-cross-origin
  X-Frame-Options                      SAMEORIGIN
  Permissions-Policy                   camera=(), microphone=(), geolocation=()
  Content-Security-Policy-Report-Only  default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'

HSTS        SSL/TLS > Edge Certificates > HTTP Strict Transport Security (HSTS)

Vercel

Adicione uma entrada headers ao vercel.json na raiz do projeto. O padrão source /(.*) corresponde a todos os caminhos; restrinja-o se algumas rotas precisarem de outra política.

{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        { "key": "Content-Security-Policy-Report-Only", "value": "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" },
        { "key": "X-Frame-Options", "value": "SAMEORIGIN" },
        { "key": "X-Content-Type-Options", "value": "nosniff" },
        { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" },
        { "key": "Permissions-Policy", "value": "camera=(), microphone=(), geolocation=()" }
      ]
    }
  ]
}

Netlify

Crie um arquivo chamado _headers no diretório de publicação, a pasta que o Netlify publica. Cada linha de caminho, como /*, é seguida por linhas recuadas Nome: valor. As mesmas regras também podem ficar no netlify.toml em [[headers]].

/*
  Content-Security-Policy-Report-Only: default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
  X-Frame-Options: SAMEORIGIN
  X-Content-Type-Options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  Permissions-Policy: camera=(), microphone=(), geolocation=()

Next.js

Retorne os cabeçalhos da função async headers() no next.config.js; o source '/:path*' cobre todas as rotas. headers() não é executada em uma exportação estática (output: 'export'); nesse caso, defina os cabeçalhos no host que serve os arquivos exportados.

// next.config.js
const securityHeaders = [
  { key: 'Content-Security-Policy-Report-Only', value: "default-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'" },
  { key: 'X-Frame-Options', value: 'SAMEORIGIN' },
  { key: 'X-Content-Type-Options', value: 'nosniff' },
  { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
  { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
];

module.exports = {
  async headers() {
    return [{ source: '/:path*', headers: securityHeaders }];
  },
};

Depois de publicar, execute o verificador de novo: ele lê a resposta final e mostra o que a sua CDN ou plataforma realmente envia. Em seguida, abra uma página de erro e um arquivo estático nas ferramentas de desenvolvedor do navegador, porque os cabeçalhos muitas vezes são definidos só para algumas respostas.

Como ler o resultado

O que significa cada status.

  1. 01AprovadoO cabeçalho foi encontrado e passa na verificação de presença.
  2. 02Baixo · Médio · AltoAlgo está ausente ou configurado de um jeito que esta verificação aponta. O nível é o mesmo usado no snapshot completo.
  3. 03ObservadoUm valor foi registrado, mas a verificação não resultou em aprovação nem em achado.
  4. 04Nada observadoA verificação rodou, mas não havia nada a registrar, por exemplo nenhum cookie na resposta.
  5. 05Não se aplicaA verificação não se aplica, por exemplo HSTS quando você informa um endereço http://.
  6. 06Não medidoNenhuma resposta utilizável foi recebida, então a verificação não conta como aprovada.
Escopo

O que este verificador não faz.

  1. 01Ele solicita apenas a página inicial da origem informada. Caminhos e query strings são descartados e nenhuma outra página é solicitada.
  2. 02Ele verifica principalmente se um cabeçalho está presente, não se o valor combina com o seu site.
  3. 03Ele testa o redirecionamento de HTTP para HTTPS só quando você informa o endereço http://; essa execução pula o TLS e não aponta a falta de HSTS.
  4. 04Não é uma varredura de vulnerabilidades nem um teste de invasão, e não envia tráfego de ataque.
  5. 05O resultado é uma visão pontual de uma resposta; uma regra de CDN ou outra página pode enviar cabeçalhos diferentes.
Perguntas frequentes

Perguntas sobre a verificação de cabeçalhos.

Por que Server: nginx é sinalizado sem versão?

Qualquer cabeçalho Server ou X-Powered-By é avaliado como baixo, porque o nome sozinho já diz aos visitantes qual software roda o site. Remova o cabeçalho ou reduza-o a um valor genérico se a sua plataforma permitir.

Por que o resultado é diferente da configuração do meu servidor?

O verificador lê a resposta que recebe depois de até cinco redirecionamentos. Valem os cabeçalhos que uma CDN, um proxy ou a plataforma de hospedagem adiciona ou remove, e regras de CDN, proxy ou proteção contra bots podem responder aos navegadores de forma diferente do que respondem ao verificador.

Posso verificar um site que não é meu?

Sim. A verificação de cabeçalhos lê uma resposta comum que o site já envia a todo visitante; a execução completa faz mais algumas requisições comuns para as outras verificações. Módulos protegidos e auditorias completas exigem alvo verificado ou autorização explícita.

Isto é uma varredura de vulnerabilidades?

Não. É uma verificação passiva dos cabeçalhos de resposta, não uma varredura de vulnerabilidades nem um teste de invasão, e não prova que um site seja seguro.

Por que meus cabeçalhos não aparecem em algumas respostas?

Os cabeçalhos muitas vezes são definidos só para uma rota, um tipo de arquivo ou um código de status. No nginx, add_header sem always ignora as respostas de erro, e um bloco location com linhas add_header próprias descarta as do bloco server. Arquivos estáticos, rotas de API e páginas servidas por outro serviço também podem escapar da regra que os adiciona.

Posso definir o mesmo cabeçalho na aplicação e na CDN?

Defina cada cabeçalho em uma única camada. Se duas camadas o adicionarem, o navegador pode receber dois valores: com Content-Security-Policy, todas as políticas enviadas se aplicam, então o resultado é mais rígido que qualquer uma delas, e com Strict-Transport-Security só o primeiro cabeçalho é usado.

Devo enviar meu domínio para a lista de pré-carregamento HSTS?

Só se todos os subdomínios, atuais e futuros, puderem servir HTTPS. A lista exige max-age de pelo menos um ano com includeSubDomains e preload; depois os navegadores usam HTTPS para o domínio antes mesmo da primeira visita, e a remoção da lista pode levar meses para chegar aos usuários. Um max-age longo sem preload já cobre os visitantes que voltam.

Próximo passo

Transforme os problemas encontrados em um plano claro de correção.