Back to articles

Os Cabeçalhos de Segurança que a Maioria dos Sites Ainda Ignora: Dados de 49 Auditorias Reais

SEOReport Team·
security-headersweb-securitycsphststechnical-seoseo-audit

Os cabeçalhos de resposta são linhas únicas de configuração que acompanham qualquer implantação. Nos sites que auditamos, a maioria não envia nenhum deles — Permissions-Policy está ausente em 69%, e o cabeçalho mais adotado na lista ainda está faltando em 41%.

Para este relatório, lemos 6 cabeçalhos de segurança da resposta final da página inicial de cada site auditado, após redirecionamentos. Um cabeçalho enviado apenas em um salto pré-redirecionamento não conta, porque o navegador nunca o aplica à página. A pergunta é deliberadamente estreita: a resposta carregou o cabeçalho de qualquer forma.

Em 49 sites auditados entre maio 23 e August 31, 2026, a resposta costuma ser não. Permissions-Policy está faltando em 69% deles, Referrer-Policy em 65%, Content-Security-Policy em 61%, X-Frame-Options em 51%, X-Content-Type-Options em 43%, e Strict-Transport-Security — o mais adotado entre os 6 — em 41%.

Metodologia: última captura de auditoria concluída por domínio do nosso conjunto atual de verificações, aproximadamente de maio 23 a August 31, 2026, 49 domínios distintos, anonimizado. Cada porcentagem é a participação dos sites cuja resposta da página inicial não carregou aquele cabeçalho. A amostra é auto-selecionada — proprietários que realizaram uma auditoria — e tende a favorecer sites pequenos e de médio porte, o que provavelmente subestima a adoção de cabeçalhos em todo o web, já que plataformas grandes os definem na borda. Trate as participações como direcional para a cauda longa.

Share of 49 Audited Sites Missing Each Security Header

Estes números contam presença, não qualidade

Precisão na medição importa aqui, porque define o teto do que esses números podem afirmar.

Os números descrevem 1 resposta por site: a página inicial, após redirecionamentos. Presença significa um valor não vazio, e nada mais. Um cabeçalho Strict-Transport-Security cujo max-age é 1 segundo conta como presente, e o mesmo acontece com um Content-Security-Policy permissivo o suficiente para permitir qualquer coisa. Presença não diz nada sobre se a política está bem construída.

Isso parece uma barra fraca até você considerar o que mede. Um cabeçalho com qualquer valor é evidência de que um humano uma vez abriu uma configuração de servidor, uma regra CDN, ou um arquivo middleware e digitou uma diretiva. A medição é um teste de se a camada de configuração de um site já foi tocada intencionalmente — por isso as taxas de falha são a parte interessante, não as taxas de aprovação.

Dois detalhes decidem se um cabeçalho que você já envia realmente protege alguma coisa:

  • CSP apenas de relatório não aplica nada. Content-Security-Policy-Report-Only registra violações sem bloqueá-las. É a maneira certa de começar, mas até que o cabeçalho Content-Security-Policy de aplicação seja enviado, a política não protege nada.
  • frame-ancestors e X-Frame-Options alcançam clientes diferentes. Uma diretiva CSP frame-ancestors é o controle melhor, e clientes mais antigos leem apenas o cabeçalho legado X-Frame-Options. Envie ambos.

Adoção acompanha quão antigo é um cabeçalho, não quão difícil é

A ordem das taxas de falha está próxima de reverso cronológico. HSTS, o mais antigo dos 6 e reduzível a um toggle em cada painel principal CDN, é o mais adotado. X-Content-Type-Options e X-Frame-Options, ambas convenções de fornecedor muito anteriores aos seus sucessores formais, ficam no meio. Referrer-Policy e Permissions-Policy, os dois mais recentes, são os mais ausentes — e Permissions-Policy, que nenhum host comum define em seu nome, fica por último.

Nenhum deles é mais difícil que os outros em termos de engenharia. 5 dos 6 são uma linha estática em um bloco de servidor, uma regra CDN, ou um arquivo de middleware de borda, sem mudanças de aplicação e sem risco comportamental. O que os separa é quanto tempo tiveram para acumular padrões e quantos posts de blog, checklists e templates de framework os absorveram. Vimos a mesma forma quando classificamos cada verificação falha em nossa história de auditoria: cabeçalhos de resposta dominaram o topo da lista, acima de canonicalização, renderização e desempenho. Essa classificação cobriu uma janela diferente, uma amostra diferente e um conjunto de verificações mais antigo, então os dois conjuntos de porcentagens não são uma linha de tendência — mas a posição dos cabeçalhos no topo de ambos é a descoberta duradoura.

A outra razão estrutural é invisibilidade. Um cabeçalho ausente não muda nada na tela. Nenhum CMS avisa você, nenhuma build falha, nenhum painel fica vermelho. A ausência só é observável para algo que inspeciona respostas brutas — que é exatamente o que uma auditoria, o estado de segurança de um navegador e uma parcela crescente de leitores automatizados fazem. É a mesma assimetria que encontramos em paridade de renderização: o que humanos veem em um navegador e o que máquinas recebem sobre HTTP divergiram silenciosamente.

O que cada cabeçalho protege

Strict-Transport-Security diz ao navegador que recuse HTTP em texto simples para seu domínio por um período declarado, o que fecha a janela de redirecionamento que um atacante na rede pode hijack antes que seu redirecionamento http:// → https:// seja acionado. Também é o único cabeçalho na lista que traz um compromisso: os navegadores honram o max-age mesmo se você depois quebrar o HTTPS. Comece curto, confirme que cada subdomínio e recurso são servidos limpos sobre TLS, então expanda.

Strict-Transport-Security: max-age=31536000; includeSubDomains

Content-Security-Policy limita de onde scripts, estilos, frames e conexões podem vir. É o único cabeçalho aqui que contém um incidente em vez de prevenir uma categoria de um: quando um gerenciador de tags é comprometido ou a entrada do usuário chega ao DOM, o CSP decide se o script injetado pode ser executado ou alcançar um servidor que ele escolher. Também é o único que pode quebrar uma página funcional, razão pela qual pertence ao final da sequência abaixo.

Content-Security-Policy-Report-Only: default-src 'self'

X-Frame-Options declara se outras origens podem colocar suas páginas em um frame. Sem ele, sua interface pode ser incorporada sob uma sobreposição transparente em uma página de atacante e clicada por usuários que acreditam estar em seu site. O CSP moderno expressa isso melhor com frame-ancestors; envie ambos, já que clientes antigos leem apenas o cabeçalho legado.

X-Frame-Options: DENY

X-Content-Type-Options impede que os navegadores adivinhem o tipo de resposta quando o Content-Type declarado parece errado. Sniffing é como um arquivo enviado que você serve como texto pode ser executado como um script em vez. O cabeçalho tem exatamente 1 valor válido.

X-Content-Type-Options: nosniff

Referrer-Policy regula quanto do atual URL viaja para terceiros em cliques de saída e carregamentos de subrecursos. Seus URLs carregam parâmetros de campanha, consultas de busca internas, identificadores de conta e, às vezes, tokens, e todo pixel de análise e fonte CDN na página são destinatários. Navegadores principais convergiram para um padrão razoável, mas um padrão é uma decisão que o agente do usuário faz por você e varia por cliente; enviar o cabeçalho torna sua política explícita, e permite que um site que lida com URLs sensíveis escolha algo mais rigoroso, como same-origin.

Referrer-Policy: strict-origin-when-cross-origin

Permissions-Policy decide quais capacidades do navegador seu documento e seus frames incorporados podem solicitar — câmera, microfone, geolocalização e o resto da lista de recursos poderosos. Sem o cabeçalho, tudo que você não desativou está disponível para todo script na página, incluindo tags de terceiros que você não escreveu. Negue o que você não usa.

Permissions-Policy: camera=(), microphone=(), geolocation=()

Envie os 4 one-liners primeiro, depois dedique uma tarde ao CSP

O valor de proteção e o risco de implantação discordam exatamente sobre 1 cabeçalho, e a ordem de correção resolve a discordância a favor da entrega.

NãoSimLeia seus próprioscabeçalhos de respostaImplante 1: HSTS com ummax-age curtoImplante 2: nosniff,Referrer-Policy,Permissions-Policy,X-Frame-OptionsAmplie o max-age do HSTSuma vez que o TLS estejaconfirmado em todos oslugaresCSP em modoapenas-relatórioRelatórios de violaçãolimpos?Ajustar fontes, mantermodo apenas-relatórioAplicar CSP, adicionarframe-ancestors
Diagram source
graph TD
    A[Leia seus próprios cabeçalhos de resposta] --> B[Implante 1: HSTS com um max-age curto]
    B --> C[Implante 2: nosniff, Referrer-Policy, Permissions-Policy, X-Frame-Options]
    C --> D[Amplie o max-age do HSTS uma vez que o TLS esteja confirmado em todos os lugares]
    D --> E[CSP em modo apenas-relatório]
    E --> F{Relatórios de violação limpos?}
    F -->|Não| G[Ajustar fontes, manter modo apenas-relatório]
    G --> F
    F -->|Sim| H[Aplicar CSP, adicionar frame-ancestors]

Implantar 1 — HSTS, curto. Alto valor de proteção, e risco quase zero quando seu site já serve HTTPS em todos os lugares. Defina um max-age modesto primeiro para que um problema TLS em um subdomínio esquecido permaneça recuperável.

Implantar 2 — as 4 linhas estáticas juntas. nosniff, Referrer-Policy, Permissions-Policy e X-Frame-Options são valores estáticos sem dependência de aplicação. Eles são 4 dos 6 cabeçalhos e, com essas taxas de falha, a maioria do que um site médio está faltando. Não há razão para prepará‑los separadamente.

Depois, estenda HSTS, uma vez que você tenha confirmado que todos os hosts sob o domínio servem corretamente sobre TLS.

Último — CSP, em modo apenas-relatório. Implante Content-Security-Policy-Report-Only, colete violações do tráfego real e enumere as fontes de script e conexão nas quais você realmente depende. Somente então altere o cabeçalho para forçar e adicione frame-ancestors junto com sua linha X-Frame-Options. Maior esforço, último na sequência, porque é o único item da lista que pode derrubar uma página funcional.

Leia seus próprios cabeçalhos no comando 1

Toda a medição é reproduzível a partir de um terminal. Siga redirecionamentos, pois a resposta final é a que o navegador aplica:

bash
curl -sSL -o /dev/null -D - https://example.com/ \
| grep -iE 'strict-transport-security|content-security-policy|x-frame-options|x-content-type-options|referrer-policy|permissions-policy'

Cada linha que não retorna é um cabeçalho que sua página inicial não envia. Todos os 6 retornados significam que a barra de presença foi limpa e a próxima pergunta — se as próprias políticas são boas — vale a pena fazer. Um diagnóstico pago do SEOReport lista cada cabeçalho ausente com o valor que o resolve.

Os cabeçalhos neste conjunto de dados não faltam porque são difíceis ou contestados. Eles faltam porque nada na vida cotidiana de um site jamais revela sua ausência: sem erro, sem mudança visual, sem build falhando. Os sites que passam são os que alguém, uma vez, procurou — e esse único deploy ainda está disponível para a maioria que não tem.

Obtenha o diagnóstico completo do seu site

Um relatório baseado em evidências e um plano de ação priorizado, em um plano com créditos mensais.