Como corrigir os cabeçalhos de segurança que não aplicam no WordPress com All in One Security
O que é security headers que não aplicam no AIOS?
Security headers são cabeçalhos HTTP que o servidor envia junto com cada resposta para instruir o navegador a reforcar a segurança da página. Os mais comuns são o X-Frame-Options (impede que o site seja carregado dentro de um iframe de terceiros), o X-Content-Type-Options (bloqueia o MIME-sniffing), o Strict-Transport-Security ou HSTS (força HTTPS), o Referrer-Policy e o Content-Security-Policy. No WordPress, uma forma de configura-los e pelo All in One Security, que escreve diretivas no arquivo .htaccess do site.
O problema aparece quando esses cabeçalhos não chegam na resposta HTTP, mesmo com a regra cadastrada no painel do AIOS. A documentação oficial do plugin e direta sobre o limite técnico: recursos que usam o arquivo .htaccess não se aplicam em servidores Nginx ou Windows IIS, e o próprio AIOS remove as opções de .htaccess do menu nesses ambientes. O AIOS também não tem uma tela dedicada de Security Headers: os cabeçalhos são adicionados manualmente em Tools, no campo de regras .htaccess personalizadas. Se o servidor ignora o .htaccess, se outro plugin ou camada de CDN já envia o cabeçalho, ou se a sintaxe esta fora do bloco mod_headers, o navegador nunca recebe o header esperado.
Como identificar
- Ferramentas como securityheaders.com ou a aba Network do navegador mostram a ausencia de ‘X-Frame-Options’, ‘X-Content-Type-Options’ ou ‘Strict-Transport-Security’ na resposta HTTP, mesmo após salvar a regra no AIOS.
- O menu de regras .htaccess do AIOS some ou exibe um aviso de que o servidor não suporta .htaccess (tipico de hospedagem Nginx ou IIS).
- Aparecem cabeçalhos duplicados na resposta, como dois ‘X-Frame-Options’ diferentes, porque o plugin e o servidor enviam o mesmo header.
- Após colar a regra de header, o site retorna ‘500 Internal Server Error’ e o navegador exibe ‘This page isn’t working’ por causa de sintaxe invalida no .htaccess.
- O cabeçalho aparece ao acessar o servidor de origem diretamente, mas some quando a requisicao passa pelo CDN ou proxy reverso na frente do site.
Como prevenir
- Antes de configurar headers no AIOS, confirme se a hospedagem e Apache/LiteSpeed; em Nginx ou IIS, planeje a aplicação direto na configuração do servidor desde o inicio.
- Centralize os cabeçalhos de segurança em uma única camada (plugin, servidor ou CDN) para nunca ter o mesmo header enviado por duas fontes.
- Valide a resposta HTTP em staging com curl -I ou em um scanner de headers antes de subir a regra para producao.
- Introduza o Strict-Transport-Security com max-age curto primeiro e so aumente o prazo depois de confirmar que todo o tráfego funciona em HTTPS, evitando lockout.
Causa
- O site roda em servidor Nginx ou Windows IIS: a documentação oficial do AIOS afirma que recursos baseados em .htaccess não se aplicam nesses servidores, e o plugin remove as opções de .htaccess do menu, entao os cabeçalhos colados ali nunca são lidos.
- Os cabeçalhos foram colados fora de um bloco 'IfModule mod_headers.c' valido em Tools, regras .htaccess personalizadas do AIOS, e o Apache ignora a diretiva Header set quando o módulo headers não esta carregado ou o bloco esta mal formado.
- Outro componente da pilha (o tema, outro plugin de segurança, ou o painel da hospedagem) já envia o mesmo cabeçalho, gerando duplicidade ou sobrescrita que cancela o header definido no AIOS.
- Uma CDN ou proxy reverso na frente do site (como Cloudflare) remove ou substitui os cabeçalhos de origem antes de entregar a resposta ao navegador, mascarando o header definido no .htaccess do WordPress.
- O módulo mod_headers do Apache não esta habilitado na hospedagem, entao toda diretiva Header do .htaccess e ignorada silenciosamente sem aplicar nenhum cabeçalho.
Como resolver
- Confirme se o servidor e Apache, Nginx ou IIS: Os cabeçalhos do AIOS dependem do .htaccess, que so funciona em Apache e LiteSpeed. Se o menu de regras .htaccess sumiu no AIOS, o servidor e Nginx ou IIS e você precisa aplicar os headers na configuração do servidor, não no plugin. Verifique o cabeçalho Server da resposta para identificar a stack.
Painel WP -> WP Security -> Settings -> aba .htaccess File (se ausente, o servidor não usa .htaccess) No terminal: curl -I https://seusite.com.br Observe a linha 'Server:' (Apache/LiteSpeed usam .htaccess; nginx não) - Adicione os cabeçalhos em Tools, regras .htaccess do AIOS: O AIOS não tem tela dedicada de Security Headers; os cabeçalhos entram pelo campo de regras .htaccess personalizadas em Tools. Cole o bloco dentro de um IfModule mod_headers.c para o Apache so aplicar quando o módulo existir, evitando erro 500.
Painel WP -> WP Security -> Tools -> .htaccess Cole o bloco de headers (veja a seção de código abaixo) e salve Recarregue o site e teste com: curl -I https://seusite.com.br - Se o servidor for Nginx ou IIS, aplique no servidor: Em Nginx os headers não saem do .htaccess; eles precisam ir no bloco server do arquivo de configuração do site, via diretiva add_header, e o serviço precisa ser recarregado. Na maioria das hospedagens gerenciadas isso e feito pelo suporte ou pelo painel.
Edite o server block do site (ex.: /etc/nginx/sites-available/seusite) add_header X-Content-Type-Options "nosniff" always; Salve e recarregue: sudo nginx -t && sudo systemctl reload nginx - Elimine cabeçalhos duplicados: Se o teste mostrar o mesmo cabeçalho duas vezes, outro plugin, o tema ou a hospedagem já o envia. Mantenha apenas uma fonte: ou remova a regra do AIOS, ou desative o header no outro componente, para o navegador receber um único valor consistente.
curl -I https://seusite.com.br | grep -i x-frame-options Se aparecer duas vezes, remova o header de uma das fontes (AIOS ou outro plugin) Teste de novo até restar uma única linha por cabeçalho - Verifique a CDN ou proxy na frente do site: Se o header aparece no servidor de origem mas some pelo domínio público, uma CDN ou proxy reverso esta filtrando a resposta. Configure os cabeçalhos no painel da CDN ou faca o proxy repassar os headers de origem, e limpe o cache após a mudanca.
Compare a origem e o domínio: curl -I --resolve seusite.com.br:443:IP_DE_ORIGEM https://seusite.com.br No painel da CDN, configure os Transform Rules / Response Headers ou habilite o passthrough Purgue o cache da CDN após salvar
# Cole em WP Security -> Tools -> .htaccess (servidores Apache/LiteSpeed)
<IfModule mod_headers.c>
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "geolocation=(), microphone=(), camera=()"
# Ative o HSTS so depois de confirmar que todo o trafego usa HTTPS
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" env=HTTPS
</IfModule>














