Os Cabeçalhos de Segurança que a Maioria dos Sites Ainda Ignora: Dados de 49 Auditorias Reais
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%.
Cada auditoria que executamos lê os cabeçalhos de resposta da página inicial. 6 deles carregam um veredicto de passar ou falhar; CSP apenas-relatório e o par de isolamento cross-origin são relatados para contexto e nunca contados como falhas. A leitura acontece na captura simples HTTP fetch — a mesma captura que um crawler de IA recebe — e na resposta final após redirecionamentos, então um site que define seus cabeçalhos apenas no salto pré-redirecionamento não recebe crédito por eles. A pergunta que o motor faz é 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 dos 6 — em 41%. Metodologia: última captura de auditoria concluída por domínio do nosso conjunto atual de verificações, aproximadamente maio 23 – 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 fizeram uma auditoria — e tende a favorecer sites pequenos e de médio porte, que provavelmente subestimam 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.
A verificação pergunta se o cabeçalho existe, não se ele é bom
Precisão na medição importa aqui, porque define o teto do que esses números podem afirmar.
O motor lê apenas a página inicial — um URL, uma resposta — e pega os valores do cabeçalho da captura simples-HTTP quando essa captura está disponível, recuando para a outra captura da página inicial quando não está. Presença significa um valor não vazio. Não há avaliação de diretivas: um Strict-Transport-Security cujo max-age é 1 segundo passa, e o mesmo acontece com um Content-Security-Policy permissivo o suficiente para permitir qualquer coisa. Nada sobre um veredicto de passar diz que a política está bem construída.
Isso parece uma barra fraca até você considerar o que ele mede. Um cabeçalho com qualquer valor de qualquer forma é 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 verificaçã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.
A severidade é atribuída por cabeçalho em vez de uniformemente. Strict-Transport-Security e Content-Security-Policy falham com alta severidade. X-Frame-Options, X-Content-Type-Options, Referrer-Policy e Permissions-Policy falham em nível médio. Isolamento cross-origin, o par COOP e COEP, é apenas informativo — ele passa quando qualquer um dos cabeçalhos está presente e, caso contrário, relata um veredicto informativo, nunca uma falha, porque esses cabeçalhos controlam recursos avançados do navegador em vez de defesas básicas.
Dois comportamentos valem a pena conhecer antes de ler seu próprio relatório:
- Report-only CSP não satisfaz a verificação CSP. O mecanismo analisa especificamente
Content-Security-Policy. Um site que executa apenasContent-Security-Policy-Report-Onlyfalha na verificação de aplicação e recebe um veredicto informativo separado declarando que violações são registradas mas não bloqueadas. Esse veredicto existe apenas quando um dos dois cabeçalhos CSP está presente. frame-ancestorsnão satisfaz a verificação X-Frame-Options. O mecanismo lê o cabeçalhoX-Frame-Optionspor si só. Um CSP moderno com uma diretivaframe-ancestorsé o controle melhor, e um site que o envia enquanto descarta o cabeçalho legado ainda verá essa verificação falhar.
Há também uma acomodação de plataforma no código. Quando a resposta vem do Vercel e a página carrega o script BotID do Vercel, um CSP ausente ainda falha, mas em nível médio em vez de alto, com uma nota explicando que BotID precisa de permissões de script inline que combatem a aplicação estrita do CSP. Um site pode documentar a restrição deliberadamente colocando um comentário HTML como <!-- seoreport-ignore: vercel-botid-csp --> nos primeiros 1 KB da página inicial; quando o nome da razão é CSP ou BotID, a verificação muda para um veredicto informativo em vez de falha. Este é o único escape na família, e existe porque uma restrição real de plataforma não deve ser interpretada como negligência.
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, é o ú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 percentuais 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 é observável apenas por 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 render parity: 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ê quebrar o HTTPS depois. Comece curto, confirme que cada subdomínio e recurso são servidos corretamente via TLS, depois 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, pois o cabeçalho legado é o que clientes antigos e nossa própria verificação leem.
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 cada pixel de análise e fonte CDN na página é um destinatário. 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 restrito, como same-origin.
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy decide quais recursos do navegador seu documento e seus frames embutidos podem solicitar — câmera, microfone, geolocalização e o restante da lista de recursos poderosos. Sem o cabeçalho, tudo que você não desativou está disponível para todos os scripts 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
A severidade do mecanismo 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.
Implantar 1 — HSTS, curto. Maior gravidade, 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 de severidade média 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 das verificações 6 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 impor e adicione frame-ancestors junto com sua linha X-Frame-Options. Maior gravidade, 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 é isso que o motor faz:
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 é uma verificação que sua página inicial falha. Todos os 6 retornados significam que a barra de presença foi limpa e a próxima pergunta — se as políticas em si são boas — vale a pena fazer. Nosso relatório gratuito executa a mesma leitura em cada auditoria e 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.
Veja como seu site está classificado
Get a free IA-powered SEO report with actionable findings and priority fixes for your website.
Não é necessário cadastro.