Guia de correção

Como adicionar cabeçalhos de segurança ausentes no WordPress

8 de fevereiro de 2026

Cabeçalhos de segurança são cabeçalhos de resposta HTTP que dizem aos navegadores para ativarem recursos de segurança embutidos. A maioria dos sites WordPress não tem vários desses cabeçalhos por padrão, porque nem o núcleo do WordPress nem a maioria dos provedores de hospedagem os definem automaticamente. A boa notícia é que adicioná-los leva apenas alguns minutos, e a melhoria de segurança é significativa. Este guia cobre todos os cabeçalhos de segurança importantes, explica o que cada um faz e mostra como adicioná-los todos de uma vez.

Quais cabeçalhos de segurança todo site WordPress deveria ter?

Aqui está a lista completa de cabeçalhos de segurança recomendados, com seus valores e contra o que protegem:

  • X-Frame-Options: SAMEORIGIN: impede que seu site seja carregado dentro de um iframe em outro domínio. Isso impede ataques de clickjacking, em que um site malicioso sobrepõe botões invisíveis em cima da sua página.
  • X-Content-Type-Options: nosniff: impede que os navegadores adivinhem o MIME type de um arquivo. Sem isso, um atacante poderia enviar um arquivo que parece uma imagem mas contém JavaScript, e o navegador poderia executá-lo.
  • Referrer-Policy: strict-origin-when-cross-origin: controla quanta informação de URL é compartilhada quando os usuários clicam em links para outros sites. Essa configuração envia a URL completa para requisições de mesma origem, mas apenas o domínio para requisições cross-origin, protegendo parâmetros sensíveis na URL.
  • Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(): desabilita recursos do navegador que seu site não usa. Os parênteses vazios significam "ninguém pode usar esse recurso", o que impede que scripts maliciosos acessem câmera, microfone ou localização.
  • Strict-Transport-Security: max-age=31536000; includeSubDomains: força os navegadores a sempre usar HTTPS. Veja nosso guia dedicado de HSTS para detalhes sobre rollout seguro.
  • X-XSS-Protection: 1; mode=block: um cabeçalho legado para navegadores antigos que habilita o filtro XSS embutido. Os navegadores modernos descontinuaram isso em favor do CSP, mas não custa incluí-lo para compatibilidade retroativa.
  • Content-Security-Policy: o cabeçalho de segurança mais poderoso (e complexo). Veja nosso guia dedicado de CSP para um passo a passo completo.

Como priorizar: quais cabeçalhos adicionar primeiro

Se você está adicionando cabeçalhos de segurança pela primeira vez, esta é a ordem que oferece a maior melhoria de segurança com o menor risco:

  1. X-Content-Type-Options: risco zero de quebrar qualquer coisa. Apenas adicione.
  2. X-Frame-Options: seguro, a menos que você intencionalmente embute seu site em iframes em outros domínios (improvável para a maioria dos sites WordPress).
  3. Referrer-Policy: risco muito baixo. O valor recomendado strict-origin-when-cross-origin já é o comportamento padrão dos navegadores modernos.
  4. Permissions-Policy: risco baixo, a menos que seu site de fato use as APIs de câmera, microfone ou geolocalização.
  5. X-XSS-Protection: cabeçalho legado, sem risco algum.
  6. Strict-Transport-Security: requer HTTPS funcionando primeiro. Faça um rollout gradual (veja nosso guia de HSTS).
  7. Content-Security-Policy: maior risco de quebrar coisas no WordPress. Sempre comece com modo Report-Only (veja nosso guia de CSP).

Adicionando todos os cabeçalhos via Apache .htaccess

Esse é o método mais comum para sites WordPress em hospedagem compartilhada. Abra o arquivo .htaccess no diretório raiz do seu WordPress e adicione o seguinte bloco. Coloque-o antes da seção # BEGIN WordPress para manter a organização:

<IfModule mod_headers.c>
    # Prevent clickjacking
    Header always set X-Frame-Options "SAMEORIGIN"

    # Prevent MIME-type sniffing
    Header always set X-Content-Type-Options "nosniff"

    # Control referrer information
    Header always set Referrer-Policy "strict-origin-when-cross-origin"

    # Restrict browser features
    Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"

    # Force HTTPS (only add if SSL is fully working)
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    # XSS Protection for legacy browsers
    Header always set X-XSS-Protection "1; mode=block"
</IfModule>

Algumas coisas a ter em mente:

  • O wrapper IfModule garante que o Apache não dispare um erro 500 se o mod_headers não estiver habilitado no seu servidor.
  • Usar Header always set (em vez de apenas Header set) garante que os cabeçalhos sejam enviados em todas as respostas, incluindo páginas de erro.
  • Se você já tem um bloco <IfModule mod_headers.c> no seu .htaccess, adicione as linhas Header individuais dentro desse bloco existente em vez de criar um duplicado.

Adicionando todos os cabeçalhos via nginx

Se o seu site WordPress roda em nginx (comum em hospedagens WordPress gerenciadas como Kinsta, Cloudways, GridPane ou SpinupWP), adicione estas linhas dentro do seu bloco server:

# Security Headers
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=(), payment=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-XSS-Protection "1; mode=block" always;

Observações importantes específicas do nginx:

  • A palavra-chave always envia o cabeçalho em todos os códigos de resposta (incluindo 4xx e 5xx). Sem ela, o nginx só envia cabeçalhos em respostas 2xx.
  • Se você tem um bloco location separado que trata PHP (por exemplo, location ~ .php$), pode ser necessário adicionar os cabeçalhos lá também, dependendo da sua configuração do nginx. O nginx não herda diretivas add_header de blocos pai se o bloco filho tem seu próprio add_header.
  • Após fazer alterações, sempre teste e recarregue: sudo nginx -t && sudo systemctl reload nginx.

Adicionando cabeçalhos via PHP no WordPress

Se você não consegue acessar arquivos de configuração do servidor, pode enviar cabeçalhos de segurança via PHP. Adicione isto ao functions.php do seu tema ou a um plugin específico do site personalizado:

function iwp_add_security_headers() {
    if ( is_admin() ) {
        return;
    }

    header( 'X-Frame-Options: SAMEORIGIN' );
    header( 'X-Content-Type-Options: nosniff' );
    header( 'Referrer-Policy: strict-origin-when-cross-origin' );
    header( 'Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()' );
    header( 'X-XSS-Protection: 1; mode=block' );
}
add_action( 'send_headers', 'iwp_add_security_headers' );

A verificação is_admin() ignora a área administrativa do WordPress para evitar conflitos potenciais com a funcionalidade do admin. Note que essa abordagem em PHP tem uma limitação: só se aplica a páginas que o WordPress processa. Arquivos estáticos (imagens, CSS, JS, fontes) servidos diretamente pelo seu servidor web não carregarão esses cabeçalhos. Para cobertura completa, a configuração no nível do servidor é sempre a melhor escolha.

Plugins de cabeçalhos de segurança no WordPress

Se você prefere uma abordagem baseada em plugin, estas opções fornecem uma interface amigável para gerenciar cabeçalhos de segurança:

  • HTTP Headers: um plugin gratuito com uma interface abrangente para definir todos os cabeçalhos de segurança. Suporta X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy e mais. Você configura tudo a partir do admin do WordPress sem mexer em nenhum arquivo.
  • Really Simple SSL Pro: a versão premium inclui um módulo de cabeçalhos de segurança que permite ativar ou desativar cabeçalhos individuais. Também fornece recomendações e explica cada cabeçalho.
  • Headers Security Advanced & HSTS WP: um plugin focado especificamente em cabeçalhos de segurança. Cobre todos os principais cabeçalhos e inclui presets para configurações comuns.
  • Jeremykendall's Security Headers: uma opção leve que adiciona todos os cabeçalhos recomendados com padrões sensatos.

Embora plugins sejam convenientes, eles vêm com trade-offs. Se o plugin é desativado, atualizado com um bug ou removido, seus cabeçalhos de segurança somem instantaneamente. Para sites em produção, a configuração no nível do servidor é mais confiável porque não depende do WordPress nem de qualquer plugin estar ativo.

Testando seus cabeçalhos com ferramentas online

Após adicionar seus cabeçalhos, verifique-os com estas ferramentas gratuitas:

  • securityheaders.com: insira sua URL e receba uma nota de A+ a F junto com um detalhamento de quais cabeçalhos estão presentes e quais estão ausentes. Almeje pelo menos uma nota A.
  • observatory.mozilla.org: a ferramenta da Mozilla realiza uma análise mais abrangente, incluindo avaliação de CSP e segurança de cookies.
  • DevTools do navegador: pressione F12, vá para a aba Network, clique na requisição do documento principal e role até Response Headers para ver exatamente o que seu servidor envia.

Você também pode verificar pela linha de comando:

curl -sI https://example.com

Isso mostra todos os cabeçalhos de resposta, incluindo seus cabeçalhos de segurança recém-adicionados.

Considerações sobre CDN e proxy reverso

Se o seu site WordPress fica atrás de uma CDN como Cloudflare, Sucuri ou Fastly, esteja ciente de que a CDN pode remover, sobrescrever ou adicionar seus próprios cabeçalhos. Eis o que você precisa saber:

  • Cloudflare: por padrão não remove cabeçalhos de segurança, então cabeçalhos definidos no seu servidor de origem passarão. O Cloudflare também oferece suas próprias configurações de cabeçalhos de segurança no painel, em SSL/TLS > Edge Certificates (para HSTS) e em managed rules.
  • Sucuri: o firewall deles pode adicionar alguns cabeçalhos de segurança automaticamente. Verifique as configurações do seu painel Sucuri para ver quais estão ativos e evitar duplicatas.
  • Fastly / KeyCDN / BunnyCDN: a maioria das CDNs permite adicionar cabeçalhos de resposta personalizados no painel de configuração. Isso pode ser uma boa alternativa se você não pode modificar a configuração do servidor de origem.

Se você ver cabeçalhos duplicados na sua resposta (por exemplo, duas linhas X-Frame-Options), isso pode causar comportamento imprevisível dos navegadores. Garanta que cada cabeçalho seja definido em apenas um lugar: ou no servidor de origem ou no nível da CDN, não em ambos.

Erros comuns ao adicionar cabeçalhos de segurança

  • Blocos IfModule duplicados: se o seu .htaccess já tem um bloco <IfModule mod_headers.c> (talvez de um plugin), adicionar um segundo pode causar conflitos. Mescle seus cabeçalhos no bloco existente.
  • Definir cabeçalhos só via PHP: isso deixa de fora todos os arquivos estáticos. Use configuração no nível do servidor para cobertura completa.
  • Sobrescrever cabeçalhos em blocos location (nginx): se um bloco location filho tem qualquer add_header, ele substitui todos os cabeçalhos do bloco pai. Você precisa repetir todos os cabeçalhos em cada bloco location que define o seu próprio.
  • Não testar após atualizações de plugin: uma atualização de plugin ou troca de tema pode remover seus cabeçalhos baseados em PHP. Sempre teste novamente após mudanças importantes.
  • Esquecer dos subdomínios: se você tem subdomínios (staging, mail etc.), garanta que eles também tenham cabeçalhos de segurança configurados. Atacantes frequentemente miram o subdomínio mais fraco.

Verifique seus cabeçalhos de segurança com o InspectWP

Após adicionar todos os cabeçalhos, execute uma nova varredura do InspectWP no seu site WordPress. A seção de segurança do seu relatório lista cada cabeçalho de segurança e mostra seu status. Cada cabeçalho que estiver presente e corretamente configurado aparecerá em verde. Cabeçalhos ausentes aparecem em vermelho ou amarelo, dependendo da importância. Use o recurso de relatórios automáticos do InspectWP para monitorar seus cabeçalhos ao longo do tempo e detectar regressões causadas por mudanças no servidor ou atualizações de plugin.

Verifique seu site WordPress agora

O InspectWP analisa seu site WordPress em busca de problemas de segurança, problemas de SEO, conformidade com GDPR e desempenho — gratuitamente.

Analise seu site grátis