Como adicionar cabeçalhos de segurança em qualquer stack
Cinco cabeçalhos cobrem quase todo o básico. Veja o que cada um faz e as linhas exatas para o seu servidor.
O código e a configuração ficam em inglês.
O conjunto inicial
Strict-Transport-Security: usar sempre HTTPS neste site (leia o guia de HSTS antes de ativar).X-Content-Type-Options: nosniff: impede que os navegadores adivinhem o tipo dos arquivos.X-Frame-Options: SAMEORIGIN: impede que outros sites coloquem o seu num frame (clickjacking).Referrer-Policy: strict-origin-when-cross-origin: envia menos das suas URLs para outros sites.Permissions-Policy: desliga recursos do navegador que você não usa.
nginx
Adicione dentro do seu bloco server { }, depois rode nginx -t e recarregue.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;Atenção: se um bloco location tiver o próprio add_header, o nginx descarta os do nível server para essa location. Repita os cabeçalhos ali ou coloque-os num arquivo include compartilhado.
Apache (.htaccess)
Precisa do mod_headers (ativado na maioria das hospedagens).
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>Cloudflare
- Ative o HSTS em SSL/TLS → Edge Certificates → HTTP Strict Transport Security.
- Para os outros cabeçalhos, crie uma Response Header Transform Rule (Rules → Transform Rules → Modify Response Header) que defina cada cabeçalho como valor estático para todas as requisições recebidas.
WordPress sem acesso ao servidor
Crie wp-content/mu-plugins/security-headers.php. Plugins must-use carregam automaticamente.
<?php
// Security headers for pages WordPress serves.
add_action( 'send_headers', function () {
header( 'X-Content-Type-Options: nosniff' );
header( 'X-Frame-Options: SAMEORIGIN' );
header( 'Referrer-Policy: strict-origin-when-cross-origin' );
header( 'Permissions-Policy: camera=(), microphone=(), geolocation=()' );
} );Isso só cobre páginas geradas pelo PHP. Arquivos estáticos e alguns caches de página passam por fora; por isso cabeçalhos no servidor ou na CDN são melhores quando você puder usá-los.
Próximo passo: Content-Security-Policy
O CSP é o cabeçalho mais poderoso e o que tem mais chance de quebrar alguma coisa. Siga o guia de CSP e comece em modo somente relatório.