Blog · SEO

Security Headers: o que cada um faz e como configurá-los

Alguns headers de resposta HTTP protegem seus visitantes contra cross-site scripting, clickjacking e ataques de downgrade. Veja o que cada um faz, valores seguros para começar, como nosso verificador gratuito de security headers testa seu site e como corrigir cada problema apontado, em nginx, Apache e Cloudflare.

Searvia · 24/10/2026 · Leitura de 14 min

Um técnico de TI trancando a porta de vidro de um rack de rede em uma pequena sala de servidores

Resumo: Security headers são instruções que seu servidor envia junto com cada página, dizendo aos navegadores para sempre usar HTTPS, executar scripts apenas de fontes aprovadas por você, recusar que outros sites incorporem suas páginas em frames, nunca adivinhar tipos de arquivo e manter URLs completas fora do header Referer. Comece com HTTPS em todo o site e um certificado válido; depois adicione Strict-Transport-Security, X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin e frame-ancestors ou X-Frame-Options. Implante o Content-Security-Policy primeiro em modo somente relatório (report-only). Todos são definidos na configuração do servidor ou da CDN.

Security headers são um seguro barato. A maioria exige uma linha de configuração no servidor, não custa nada em desempenho e fecha classes inteiras de ataques: um script injetado que rouba sessões, um frame invisível que induz pessoas a clicar, uma rede de cafeteria que rebaixa o visitante para HTTP simples. Também estão entre as primeiras coisas que scanners de segurança, clientes corporativos e questionários de segurança verificam.

Este guia explica cada header e os fundamentos de conexão ao redor deles, apresenta valores iniciais seguros, mostra como nosso verificador gratuito de security headers testa seu site e detalha a correção de cada problema que ele reporta.

Primeiro o básico: HTTPS, certificado e conteúdo misto

Os headers funcionam sobre uma conexão criptografada; sem ela, não ajudam. Três itens básicos vêm primeiro:

Os headers, um por um

HeaderProtege contraValor inicial seguro
Strict-Transport-SecurityDowngrade para HTTP, roubo de cookies em redes abertasmax-age=31536000; includeSubDomains (após testar)
Content-Security-PolicyCross-site scripting (XSS), conteúdo injetado, clickjacking via frame-ancestorsComece com Content-Security-Policy-Report-Only
X-Frame-Options ou CSP frame-ancestorsClickjackingSAMEORIGIN ou frame-ancestors 'self'
X-Content-Type-OptionsMIME sniffing: arquivos executados como scripts ou estilosnosniff
Referrer-PolicyVazamento de URLs completas para outros sitesstrict-origin-when-cross-origin
Permissions-PolicyScripts incorporados usando câmera, microfone, localizaçãocamera=(), microphone=(), geolocation=()

Strict-Transport-Security (HSTS)

O HSTS diz ao navegador para usar HTTPS no seu host por um número definido de segundos, mesmo quando alguém digita http:// ou clica em um link antigo. A MDN destaca três pontos:

A lista de preload do HSTS fixa seu domínio diretamente nos navegadores. Ela exige um certificado válido, um redirecionamento de HTTP para HTTPS no mesmo host, todos os subdomínios em HTTPS e um header com max-age de pelo menos 31536000, includeSubDomains e preload. Ela também avisa que "inclusion in the preload list cannot easily be undone" (a inclusão na lista de preload não pode ser desfeita com facilidade): a remoção leva meses para chegar aos usuários. Faça o preload somente quando tiver certeza.

Content-Security-Policy (CSP)

O CSP é o mais forte dos headers e o mais difícil de implantar. Ele lista de onde scripts, estilos, imagens e outros recursos podem ser carregados, e o navegador recusa todo o resto. A MDN o descreve principalmente como "a defense against cross-site scripting (XSS) attacks" (uma defesa contra ataques de cross-site scripting).

A forma moderna recomendada é uma CSP estrita baseada em nonces ou hashes, em vez de longas listas de domínios permitidos:

Content-Security-Policy: script-src 'nonce-{RANDOM}'; object-src 'none'; base-uri 'none'

O nonce deve ser aleatório e diferente a cada resposta. A MDN alerta que 'unsafe-inline' "defeats much of the purpose of having a CSP" (anula boa parte do propósito de ter uma CSP).

Como uma política estrita pode quebrar tags de analytics, widgets de chat e scripts inline, implante em duas etapas: envie Content-Security-Policy-Report-Only com um endpoint de relatórios, corrija o que os relatórios mostrarem e só então passe para o header que aplica a política. É também no CSP que vive o upgrade-insecure-requests (uma rede de segurança contra conteúdo misto, não um substituto do HSTS) e onde o frame-ancestors controla a incorporação em frames.

X-Frame-Options e frame-ancestors

O clickjacking carrega sua página em um frame invisível em outro site e induz pessoas a clicar nos seus botões. Duas formas de impedir:

Nenhum dos dois funciona em uma tag <meta>. A MDN afirma que o X-Frame-Options em um elemento meta "has no effect" (não tem efeito) e que o frame-ancestors "is not supported in the <meta> element" (não é suportado no elemento <meta>). Observe também que o frame-ancestors não recorre ao default-src: uma política com default-src 'none' ainda permite que qualquer um incorpore a página em um frame.

X-Content-Type-Options

O nosniff diz aos navegadores para confiar no seu header Content-Type. Com ele, uma resposta solicitada como script ou folha de estilo é bloqueada se o tipo MIME não corresponder, o que impede que um arquivo enviado e disfarçado de imagem seja executado como script. Ele tem apenas um valor válido:

X-Content-Type-Options: nosniff

Certifique-se de que seu servidor envia os content types corretos, especialmente para JavaScript e CSS, antes de adicioná-lo.

Referrer-Policy

Quando um visitante clica em um link para outro site, o navegador envia um header Referer. Os navegadores modernos já usam como padrão strict-origin-when-cross-origin, que envia apenas a origem (https://example.com/) entre sites e nada ao ir de HTTPS para HTTP (MDN). A OWASP ainda recomenda defini-lo explicitamente "rather than relying on browser defaults" (em vez de depender dos padrões do navegador). Evite unsafe-url, que envia URLs completas, inclusive qualquer token contido nelas, para qualquer destino.

Permissions-Policy e os headers que devem sair

O Permissions-Policy desativa recursos do navegador que você não usa, para que um script incorporado não possa pedir acesso à câmera ou à localização. A MDN o classifica como experimental, com suporte limitado nos navegadores, então trate-o como uma camada extra. Nosso verificador gratuito não o testa; a varredura de segurança completa, sim.

Dois headers para remover em vez de adicionar: a OWASP diz para não definir o X-XSS-Protection (ou defini-lo como 0), porque os filtros antigos que ele controlava podiam criar vulnerabilidades, e considera o Expect-CT obsoleto. Ela também recomenda remover o X-Powered-By e dar ao Server um valor não informativo.

Como funciona o verificador de security headers da Searvia

O verificador de security headers gratuito usa o mesmo motor do nosso verificador de SEO de sites e coloca cinco verificações em primeiro lugar. Ele faz requisições comuns, que qualquer visitante poderia fazer; nada é atacado nem sondado.

VerificaçãoComo testaAprovadoAlertaReprovadoPrioridade
HTTPSCarrega a página via HTTPS e depois requisita http:// sem seguir redirecionamentosO HTTPS funciona e o HTTP redireciona para um endereço https:// (se o HTTP não responder, você recebe uma observação)O HTTPS não funciona, ou o HTTP não redirecionaAlta
Certificado TLSLê o certificado do host finalVálido, corresponde ao host, 14+ dias restantesMenos de 14 dias restantesExpirado ou não cobre o hostAlta
HSTSLê o max-age da resposta da página15.552.000 segundos (cerca de 6 meses) ou maisAusente ou menorBaixa
Conteúdo mistoEncontra URLs http:// em scripts, iframes, folhas de estilo, imagens, vídeo, áudio e sources em uma página HTTPSNenhumaApenas imagens ou mídiaScripts, iframes ou folhas de estiloMédia
Security headersProcura três headers de resposta principais e mostra o Referrer-PolicyOs três presentesAlgum ausenteBaixa

Os três que ele conta são Content-Security-Policy, X-Frame-Options (ou um header CSP contendo frame-ancestors) e X-Content-Type-Options. O Referrer-Policy também é listado, mas a ausência dele não conta contra você: os navegadores já usam strict-origin-when-cross-origin como padrão, e a tabela informa isso. A tabela de resultados mostra o valor de cada um, com políticas longas abreviadas.

Alguns limites a ter em mente:

Como ler os resultados

Trabalhe de cima para baixo, por prioridade. Uma falha na verificação de HTTPS ou de certificado é urgente: os visitantes veem avisos do navegador ou trafegam sem criptografia. O conteúdo misto ativo (scripts, iframes, folhas de estilo) vem em seguida, porque os navegadores bloqueiam esses arquivos e a página pode quebrar. HSTS e os security headers têm prioridade baixa na pontuação, mas também são os mais rápidos de corrigir, então agrupe-os em uma única alteração de configuração.

Como corrigir cada problema reportado pelo verificador

"The site does not work over HTTPS." / "HTTP does not redirect to HTTPS."

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Na Cloudflare, ative "Always Use HTTPS" em SSL/TLS › Edge Certificates.

"The certificate expired N days ago." / "The certificate does not cover this domain."

Um alerta com menos de 14 dias restantes normalmente significa que a renovação automática não está funcionando; investigue em vez de renovar manualmente toda vez.

"HSTS is not set." / "HSTS is on but shorter than 6 months."

Implante em etapas para que um subdomínio esquecido, só com HTTP, não fique inacessível:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

"N files load over plain HTTP."

"N key security headers are missing."

Adicione os que faltam em uma única alteração. Para nginx:

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 Content-Security-Policy-Report-Only "default-src 'self'; frame-ancestors 'self'; report-to csp" always;

Para Apache:

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"

Na Cloudflare, adicione headers de resposta com uma Transform Rule. Na Netlify, use um arquivo _headers; na Vercel, a configuração headers no vercel.json. No nginx, lembre que o add_header dentro de um bloco location substitui os headers definidos no nível do server, então repita-os ou use um arquivo de include.

Para o CSP, a linha report-only acima é um ponto de partida, não uma política pronta. Aponte o report-to para um endpoint de relatórios que você controle, revise as violações por uma ou duas semanas, ajuste a política e depois renomeie o header para Content-Security-Policy. Depois de aplicada, a verificação de CSP passa.

Como verificar os headers por conta própria

O verificador mostra o que a página verificada envia, mas outras páginas, arquivos e respostas de erro podem ser diferentes. Duas formas rápidas de conferir:

Uma surpresa comum são headers que aparecem nas páginas normais, mas não em erros ou redirecionamentos. No nginx, o add_header só se aplica a respostas de sucesso e de redirecionamento, a menos que você adicione o parâmetro always, e é por isso que todos os exemplos acima o incluem. Outra é uma CDN ou hospedagem que adiciona ou remove headers, então verifique a resposta que o público vê, não apenas o arquivo de configuração do servidor.

Lembre-se de que cada header protege uma coisa diferente. Uma CSP perfeita não faz nada por um certificado expirado, e o HSTS não faz nada contra um script injetado. O objetivo é o conjunto completo, adicionado em uma ordem sensata.

Exemplo prático (hipotético)

O exemplo a seguir é hipotético, não são dados reais. A Halden Legal, um escritório de advocacia inventado, recebe de um cliente corporativo um questionário de segurança que pergunta sobre os headers do seu site. O verificador de security headers reporta:

As correções levam uma tarde. As URLs das duas imagens são trocadas para HTTPS. Depois de confirmar que o subdomínio do portal do cliente funciona em HTTPS, o HSTS passa para max-age=31536000; includeSubDomains em duas etapas ao longo de uma semana. X-Frame-Options: SAMEORIGIN e Referrer-Policy: strict-origin-when-cross-origin são adicionados no servidor. Uma CSP em modo report-only roda por dez dias e revela um script inline do widget de agendamento, que é movido para um arquivo e permitido pela origem antes de a política ser aplicada. A execução final passa em todas as verificações, e o escritório responde ao questionário com um link para o relatório compartilhado.

Um checklist de uma hora

Como a Searvia continua monitorando a segurança do seu site

O verificador de security headers gratuito analisa sua home, ou qualquer página que você informar, em cerca de 20 segundos, sem cadastro, e o mesmo relatório cobre outras 33 verificações sobre aparência na busca, rastreamento, velocidade, mobile e autenticação de e-mail.

Uma conta gratuita da Searvia adiciona uma varredura de segurança semanal: verificações passivas de criptografia, proteções do navegador, flags de cookies, versões de software e proteção contra falsificação de e-mail, com a requisição e a resposta que comprovam cada achado. Ela dá nota à sua CSP (por exemplo, 'unsafe-inline' sem nonces ou hashes), verifica o Permissions-Policy e, depois que você verifica a propriedade, também procura arquivos .env e .git expostos, backups públicos, páginas de debug e CORS inseguro. Write the remediation plan with AI transforma os achados em configuração que você pode colar (5 créditos). Nos planos pagos a partir do Starter, o monitoramento de uptime também verifica seu certificado TLS diariamente e avisa antes de ele expirar.

Perguntas frequentes

O que são security headers?
Security headers são headers de resposta HTTP que dizem ao navegador como tratar sua página de forma mais segura: sempre usar HTTPS (Strict-Transport-Security), executar scripts apenas de fontes aprovadas (Content-Security-Policy), não permitir que outros sites a incorporem em frames (X-Frame-Options ou frame-ancestors), não adivinhar tipos de arquivo (X-Content-Type-Options) e limitar o que é enviado no header Referer (Referrer-Policy). Eles são definidos no servidor ou na CDN, não no conteúdo da página.
Security headers influenciam o SEO?
Não como fatores de ranqueamento individuais. As orientações de experiência da página do Google perguntam se as páginas são entregues de forma segura, então o HTTPS importa, e um HTTPS quebrado ou conteúdo misto prejudica os visitantes e a confiança. Headers como Content-Security-Policy e X-Frame-Options protegem os usuários contra ataques; o valor deles é a segurança, não o ranqueamento.
Qual é um bom max-age para o HSTS?
Um ano (max-age=31536000) é uma escolha comum e o mínimo para a lista de preload do HSTS, que também exige includeSubDomains e preload. Comece com valores menores, por exemplo alguns minutos, depois uma semana, depois um mês, enquanto confirma que todos os subdomínios funcionam em HTTPS, porque os navegadores recusarão HTTP simples durante todo o período. Nosso verificador aprova valores de cerca de seis meses ou mais.
Devo usar X-Frame-Options ou frame-ancestors?
Ambos servem; o frame-ancestors no Content-Security-Policy é a opção moderna mais flexível, e o X-Frame-Options é o fallback mais antigo. Use frame-ancestors 'self' ou X-Frame-Options: SAMEORIGIN se você nunca precisa que suas páginas sejam incorporadas em outros lugares. Nenhum dos dois funciona em uma meta tag; precisam ser enviados como headers HTTP.
O X-XSS-Protection ainda é necessário?
Não. A OWASP recomenda não defini-lo ou desativá-lo explicitamente com X-XSS-Protection: 0, porque os antigos filtros de XSS dos navegadores que ele controlava podiam introduzir vulnerabilidades. Use, em vez disso, um Content-Security-Policy que bloqueie scripts inline.

Fontes

  1. HTTP Security Response Headers Cheat Sheet – OWASP
  2. Strict-Transport-Security – MDN Web Docs
  3. HSTS Preload List Submission – hstspreload.org
  4. Content Security Policy (CSP) – MDN Web Docs
  5. CSP: frame-ancestors – MDN Web Docs
  6. X-Frame-Options – MDN Web Docs
  7. X-Content-Type-Options – MDN Web Docs
  8. Referrer-Policy – MDN Web Docs
  9. Permissions-Policy – MDN Web Docs
  10. Mixed content – MDN Web Docs
  11. Understanding page experience in Google Search results – Google Search Central
  12. Module ngx_http_headers_module – nginx documentation
  13. A secure web is here to stay – Chromium Blog

Continue lendo