O que cada header protege
- Strict-Transport-Security (HSTS): obriga o navegador a usar sempre HTTPS no seu domínio, mesmo que alguém digite http ou clique em um link antigo. Impede ataques que forçam a conexão sem criptografia.
- Content-Security-Policy (CSP): define de quais origens a página pode carregar scripts, estilos, imagens e frames. É a principal defesa contra injeção de scripts (XSS) e é também o header mais trabalhoso de configurar.
- X-Frame-Options: impede que outro site exiba o seu dentro de um frame invisível para enganar o usuário (clickjacking).
- X-Content-Type-Options: com o valor
nosniff, impede que o navegador "adivinhe" o tipo de um arquivo e execute como script algo que deveria ser texto ou imagem. - Referrer-Policy: controla quanto do endereço da sua página é enviado a outros sites quando o visitante clica em um link. Evita vazar parâmetros de URL.
- Permissions-Policy: desliga recursos do navegador que o site não usa, como câmera, microfone e localização.
Configuração recomendada para começar
Em hospedagem Apache com cPanel, os headers podem ser adicionados no arquivo .htaccess na raiz do site:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>
No Nginx, use a diretiva add_header ... always; no bloco do servidor. No Cloudflare, use as regras de transformação de resposta (Transform Rules).
Cuidados antes de ativar
- HSTS só depois do HTTPS funcionar em tudo. Com HSTS ativo, o navegador recusa acessar o domínio por HTTP. Se algum subdomínio ainda não tem certificado, ele vai parar de abrir. Comece sem
includeSubDomainse só adicione depois de conferir todos. - CSP em modo de relatório primeiro. Publique como
Content-Security-Policy-Report-Only, veja no console do navegador o que seria bloqueado (Google Analytics, chat, fontes, mapas) e só depois ative de verdade. Uma CSP mal configurada quebra o site. - X-Frame-Options e integrações. Se o seu site precisa ser exibido dentro de outro sistema (um portal ou intranet),
DENYvai bloquear. UseSAMEORIGINou a diretivaframe-ancestorsda CSP.
Headers são uma camada, não a segurança inteira
Esses headers reduzem a superfície de ataque no navegador do visitante, mas não substituem atualização de CMS e plugins, senhas fortes no painel, backup e certificado válido. Um site com todos os headers e um plugin desatualizado continua vulnerável.
Perguntas frequentes
Meu site não tem nenhum desses headers. Ele está inseguro?
Está menos protegido do que poderia, mas a ausência de headers não significa que ele já foi invadido. É uma camada extra de defesa, simples de configurar na maioria dos casos, que reduz o risco de alguns tipos de ataque.
Posso adicionar esses headers numa hospedagem compartilhada?
Na maioria das hospedagens com Apache, sim, pelo arquivo .htaccess. Se o servidor não aceitar mod_headers, ou se o site passa por um CDN, a configuração precisa ser feita no CDN ou pelo suporte da hospedagem.
Por que a CSP é tão difícil de configurar?
Porque ela precisa listar todas as origens legítimas de scripts e recursos do site, incluindo ferramentas de terceiros como analytics, chat e anúncios. Qualquer origem esquecida é bloqueada. Por isso o recomendado é começar em modo de relatório.
Esses headers afetam o SEO?
Não diretamente. O que afeta é o HTTPS, que é fator de ranqueamento, e o HSTS ajuda a garantir que ele seja sempre usado. Uma CSP mal configurada, porém, pode quebrar scripts e prejudicar a experiência do visitante.