Guia de correção

Como adicionar o cabeçalho HSTS no WordPress

8 de fevereiro de 2026 Atualizado em 19 de abr. de 2026

O cabeçalho HSTS (HTTP Strict Transport Security) diz aos navegadores para se conectarem ao seu site WordPress somente via HTTPS. Sem ele, visitantes podem acidentalmente cair em uma versão HTTP insegura da sua página, ficando vulneráveis a ataques man-in-the-middle. Uma vez que o cabeçalho está no lugar, os navegadores lembram da sua preferência e automaticamente atualizam toda requisição para HTTPS pela duração que você especificar.

O que o cabeçalho HSTS realmente faz?

Quando um navegador recebe o cabeçalho Strict-Transport-Security, ele armazena essa informação localmente. Para toda visita futura dentro da janela de max-age especificada, o navegador se recusa a se conectar via HTTP simples. Ele nem tenta uma conexão HTTP primeiro; vai direto para HTTPS. Isso elimina a breve janela em que um atacante poderia interceptar a requisição HTTP inicial e redirecionar o usuário para uma página maliciosa.

O cabeçalho tem três parâmetros principais:

  • max-age: por quanto tempo (em segundos) o navegador deve lembrar de forçar HTTPS. Um valor de 31536000 equivale a um ano.
  • includeSubDomains: aplica a regra a todos os subdomínios também (por exemplo, blog.example.com, shop.example.com).
  • preload: sinaliza que você quer que seu domínio seja incluído na lista preload de HSTS embutida no navegador, para que a primeiríssima visita também esteja protegida.

Antes de começar: garanta que o HTTPS funcione em todo lugar

Esse passo é crítico. Uma vez que o HSTS está ativo, os navegadores não permitirão que visitantes voltem para HTTP. Se o seu certificado SSL estiver expirado, mal configurado ou ausente em um subdomínio, essas páginas se tornam totalmente inacessíveis pela duração da sua configuração de max-age. Antes de habilitar qualquer coisa, verifique o seguinte:

  • Seu certificado SSL é válido e não está perto de expirar.
  • Todas as páginas do seu site carregam corretamente via https://.
  • Não há avisos de conteúdo misto no console do navegador (recursos HTTP carregados em páginas HTTPS).
  • Se você planeja usar includeSubDomains, todo subdomínio precisa ter um certificado válido e servir conteúdo via HTTPS.
  • Tanto o Endereço do site quanto o Endereço do WordPress (em Configurações > Geral) usam https://.

Adicionando HSTS via Apache .htaccess

Se o seu site WordPress roda em Apache (a maioria dos provedores de hospedagem compartilhada usa Apache), você pode adicionar o cabeçalho diretamente no arquivo .htaccess localizado no diretório raiz do seu WordPress. Abra o arquivo com um editor de texto ou pelo gerenciador de arquivos da sua hospedagem e adicione o seguinte bloco antes da seção # BEGIN WordPress:

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

O wrapper IfModule garante que o Apache só processe essa diretiva se o mod_headers estiver habilitado. Na maioria das hospedagens ele está habilitado por padrão, mas o wrapper previne um erro 500 em servidores onde não está disponível.

Adicionando HSTS via nginx

Para hospedagem baseada em nginx (comum em hospedagens WordPress gerenciadas como Kinsta, Cloudways ou SpinupWP), adicione o cabeçalho dentro do seu bloco server. O arquivo de configuração geralmente está em /etc/nginx/sites-available/yourdomain.com ou em um diretório de includes nginx personalizado fornecido pela sua hospedagem:

server {
    listen 443 ssl;
    server_name example.com;

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

    # ... rest of your server config
}

A palavra-chave always ao final é importante. Sem ela, o nginx só envia o cabeçalho em respostas bem-sucedidas (2xx). Com always, ele é incluído em páginas de erro (4xx, 5xx) também, que é o comportamento correto para cabeçalhos de segurança.

Após editar a configuração, teste e recarregue o nginx:

sudo nginx -t
sudo systemctl reload nginx

Adicionando HSTS via PHP no functions.php

Se você não tem acesso aos arquivos de configuração do servidor (algumas hospedagens gerenciadas restringem isso), você pode enviar o cabeçalho via PHP. Adicione o seguinte ao arquivo functions.php do seu tema ativo ou, melhor ainda, a um plugin específico do site para que sobreviva a atualizações de tema:

function iwp_add_hsts_header() {
    if ( ! is_admin() ) {
        header( 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload' );
    }
}
add_action( 'send_headers', 'iwp_add_hsts_header' );

Tenha em mente que cabeçalhos baseados em PHP só se aplicam a páginas processadas pelo WordPress. Arquivos estáticos (imagens, CSS, JS) servidos diretamente pelo Apache ou nginx não carregarão esse cabeçalho. Para cobertura completa, a abordagem em nível de servidor é sempre melhor.

Usando um plugin do WordPress para definir HSTS

Se preferir uma abordagem sem código, vários plugins podem cuidar do HSTS para você:

  • Really Simple SSL (Pro): a versão Pro inclui um módulo de cabeçalhos de segurança onde você pode ativar o HSTS e configurar max-age e includeSubDomains a partir do painel.
  • HTTP Headers: um plugin gratuito que oferece uma interface para definir vários cabeçalhos de segurança, incluindo o Strict-Transport-Security.
  • Headers Security Advanced & HSTS WP: criado especificamente para cabeçalhos de segurança, com toggle fácil para HSTS e preload.

Plugins são convenientes, mas adicionam uma dependência extra. Se o plugin é desativado ou removido, seus cabeçalhos somem junto. Para algo tão fundamental como o HSTS, uma configuração no nível do servidor é mais confiável.

Estratégia segura de rollout: comece pequeno e aumente

Pular direto para um max-age de um ano é arriscado se você não testou tudo. Se algo der errado, os navegadores continuarão forçando HTTPS por um ano inteiro, e não há como "desfazer" o cabeçalho do lado do servidor uma vez que um navegador o cacheou. Em vez disso, siga esta abordagem gradual:

  1. 5 minutos: defina max-age=300 e navegue pelo seu site. Verifique se cada página carrega, se os formulários enviam corretamente e se não há avisos de conteúdo misto.
  2. 1 dia: aumente para max-age=86400. Deixe rodando por um ou dois dias enquanto monitora seu site.
  3. 1 semana: suba para max-age=604800. Nesse ponto, você deve estar confiante de que o HTTPS funciona em todo lugar.
  4. 1 ano: defina o valor final de max-age=31536000. Esse é o mínimo exigido para submissão à lista de preload do HSTS.
  5. Adicione includeSubDomains: só faça isso quando todos os subdomínios forem confirmados como funcionando em HTTPS.
  6. Adicione preload: adicione a flag preload e submeta seu domínio em hstspreload.org.

Submetendo seu site à lista preload do HSTS

A lista de preload do HSTS é um diretório de domínios que os navegadores trazem com aplicação de HSTS embutida. Isso significa que até a primeiríssima visita ao seu site será via HTTPS, antes mesmo do navegador ter visto seu cabeçalho. Para se qualificar, seu site precisa atender a estes requisitos:

  • Servir um certificado SSL válido.
  • Redirecionar todo o tráfego HTTP para HTTPS no mesmo host.
  • Enviar o cabeçalho Strict-Transport-Security com max-age de pelo menos 31536000 (um ano).
  • Incluir a diretiva includeSubDomains.
  • Incluir a diretiva preload.

Visite hstspreload.org, insira seu domínio e submeta. Saiba que a remoção da lista de preload leva meses e requer um ciclo de atualização do navegador, então só submeta quando estiver totalmente comprometido com o HTTPS.

Como verificar seu cabeçalho HSTS com o DevTools do navegador

Após adicionar o cabeçalho, você pode confirmar rapidamente se ele está funcionando:

  1. Abra seu site no Chrome ou Firefox.
  2. Pressione F12 para abrir o DevTools.
  3. Vá para a aba Network e recarregue a página.
  4. Clique na requisição do documento principal (geralmente a primeira).
  5. Role para baixo até Response Headers.
  6. Procure por Strict-Transport-Security. Você deve ver o valor configurado.

Você também pode usar a linha de comando para verificar:

curl -sI https://example.com | grep -i strict-transport

Se o cabeçalho não aparecer, confira se você está visitando a versão HTTPS (não HTTP) e se as alterações de configuração do servidor foram salvas e recarregadas.

Erros comuns de HSTS e como evitá-los

  • Definir HSTS em respostas HTTP: o cabeçalho é ignorado pelos navegadores quando servido via HTTP simples. Só tem efeito em respostas HTTPS.
  • Esquecer da cobertura de arquivos estáticos: se você define HSTS via PHP, arquivos estáticos passam ao largo do WordPress e não carregam o cabeçalho. Use configuração no nível do servidor para cobertura completa.
  • Usar includeSubDomains sem verificar os subdomínios: se você tem um subdomínio que não suporta HTTPS (por exemplo, um servidor de staging antigo), ele se tornará inacessível.
  • Pular para um max-age longo rápido demais: sempre comece com uma duração curta e suba aos poucos.
  • Esquecer de renovar seu certificado SSL: com HSTS ativo e um certificado expirado, seu site fica completamente inacessível. Configure renovação automática com Let's Encrypt ou seu provedor de certificados.

Verifique sua configuração de HSTS com o InspectWP

Após adicionar o cabeçalho, execute uma nova varredura do InspectWP no seu site. A seção de cabeçalhos de segurança do seu relatório mostrará o status do cabeçalho Strict-Transport-Security. Se tudo estiver configurado corretamente, ele aparecerá em verde (presente). Se você também configurou outros cabeçalhos de segurança, verifique esses para ter um quadro completo da postura de segurança do seu site.

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