Guia · 3 min de leitura

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.

Atualizado em · HackGrade

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.

nginx
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).

.htaccess
<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

  1. Ative o HSTS em SSL/TLS → Edge Certificates → HTTP Strict Transport Security.
  2. 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
<?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.

Fontes

Guias relacionados

Grátis · Na hora · Sem cadastro

Descubra sua nota antes que outra pessoa descubra.

Análise passiva. Nada é atacado sem a sua permissão.

Comece grátis. Planos pagos a partir de US$ 12 por mês, ou um relatório avulso por US$ 29. Ver preços