Configurando cabeçalhos de segurança HTTP no WordPress

Publicados: 2022-02-23

A maioria dos navegadores modernos suporta uma variedade de cabeçalhos de segurança HTTP para melhorar a segurança do seu site WordPress, proteger melhor seus visitantes contra classes de ataques ao navegador, como clickjacking, script entre sites e outros ataques comuns, e até mesmo melhorar a privacidade dos visitantes do seu site conectados.

Este artigo fornece uma visão geral do que são esses cabeçalhos de segurança HTTP, explica como eles funcionam e qual é seu escopo. Ele também explica como você pode adicionar esses cabeçalhos de segurança HTTP ao seu site para melhorar a segurança do seu site WordPress.

O que é um cabeçalho de segurança HTTP afinal?

Os cabeçalhos de segurança HTTP são uma série de cabeçalhos HTTP 1 trocados entre um cliente da web (navegador) e um servidor da web que são usados ​​para especificar as configurações relacionadas à segurança da comunicação HTTP entre um cliente da web e um servidor. Habilitar cabeçalhos de segurança em seu site WordPress pode melhorar a resiliência do seu site contra ataques comuns, incluindo scripts entre sites (XSS) e clickjacking.

Como os cabeçalhos de segurança HTTP podem melhorar a segurança do WordPress

Os cabeçalhos de segurança HTTP podem ajudar a melhorar a segurança do seu site WordPress, instruindo o navegador a habilitar uma variedade de recursos de segurança de acordo. Em muitos casos, implementar os cabeçalhos corretos é uma tarefa complicada e pode até ter resultados diferentes (ou ser totalmente ineficaz) em navegadores mais antigos, por isso é uma prática recomendada experimentar quaisquer alterações em um ambiente de teste ou teste antes de aplicar qualquer alteração em um site WordPress ao vivo.

Os cabeçalhos de segurança HTTP mais usados

Quais cabeçalhos fazem o quê? Vamos mergulhar em uma visão geral de alguns dos cabeçalhos de segurança HTTP mais importantes e comumente usados.

Estrita-Segurança de Transporte

O cabeçalho HTTP Strict-Transport-Security instrui o navegador a aplicar o HTTP Strict Transport Security (HSTS) 2 . Um cabeçalho HSTS instrui o navegador visitante a sempre acessar o site por HTTPS (em vez de HTTP), mesmo que o usuário (ou um invasor tentando executar um ataque Man-in-the-Middle) tente acessar o site por HTTP, o o navegador mudará forçosamente para HTTPS, mesmo se o HTTP não estiver disponível - nessa medida, você só deve habilitar o HSTS se tiver o HTTPS habilitado e funcionando corretamente sem problemas de conteúdo misto 3 .

O seguinte cabeçalho de resposta HTTP do HTTP Strict Transport Security (HSTS) habilita o HSTS pela duração de 1 ano (31536000 segundos).


Strict-Transport-Security: max-age=31536000

Política de segurança de conteúdo

O cabeçalho de segurança HTTP Content-Security-Policy é um cabeçalho HTTP com muito poder e configurabilidade. Ele configura a Política de Segurança de Conteúdo (CSP) do navegador, que é um conjunto de recursos de segurança encontrados em navegadores modernos que fornecem uma camada adicional de segurança que ajuda a detectar e mitigar ataques como Cross-Site Scripting (XSS) e ataques de injeção de dados.

A política de segurança de conteúdo (CSP) também é notoriamente difícil de acertar, pois as configurações corretas de CSP dependem muito do site em questão e devem ser fortemente testadas antes da implantação - tanto que tem uma política irmã de segurança de conteúdo -Relatório-Somente 4 Cabeçalho HTTP usado apenas para testar o CSP.

Veja a seguir um exemplo de uma política de Política de Segurança de Conteúdo (CSP) bastante simples que só permite carregar ativos da origem de onde o site é servido.


Content-Security-Policy: default-src 'self'

No entanto, a Política de Segurança de Conteúdo (CSP) é muito mais configurável do que o mostrado neste exemplo simples. O CSP inclui outras diretivas como script-src , style-src e img-src para especificar as fontes das quais o navegador pode carregar ativos (por exemplo, CSS, imagens e fontes). Para obter uma lista completa de como o CSP pode ser configurado, consulte as diretrizes de referência rápida da Política de segurança de conteúdo.

X-Content-Type-Options

O cabeçalho de segurança HTTP X-Content-Type-Options é um cabeçalho não padrão respeitado por todos os principais navegadores que evita ataques de Cross-site Scripting (XSS) causados ​​como resultado de detecção de tipo MIME 5 . Quando presente, esse cabeçalho informa ao navegador para seguir estritamente os tipos MIME definidos no cabeçalho HTTP Content-Type e que o navegador não deve tentar detectar o tipo MIME correto para os próprios dados de resposta. O cabeçalho tem uma única diretiva — nosniff.


X-Content-Type-Options: nosniff

Cabeçalhos de segurança HTTP antigos ou não utilizados

Há também vários cabeçalhos de segurança HTTP antigos e não utilizados. Eles não são mais usados ​​ou não funcionam mais porque foram introduzidos como correções temporárias, experimentos ou até mesmo iniciativas não padronizadas que foram obsoletas ou substituídas completamente. Abaixo está uma lista desses cabeçalhos de segurança HTTP.

Cabeçalhos de segurança HTTP substituídos por Content-Security-Policy

X-Frame-Options

O cabeçalho de segurança HTTP X-Frame-Options é um cabeçalho agora obsoleto que foi introduzido pela primeira vez pelo Microsoft Internet Explorer (e adotado por outros navegadores com vários graus de uniformidade e compatibilidade) para proteger os navegadores contra Cross-site Scripting (XSS), Clickjacking e outros ataques que dependem de um site ser colocado dentro de um iframe.

Este cabeçalho agora foi substituído pela diretiva de Política de Segurança de Conteúdo (CSP) dos ancestrais de quadro. É aconselhável usar CSP com a diretiva frame-ancestors no lugar de X-Frame-Options.

Proteção X-XSS

O cabeçalho de segurança HTTP X-XSS-Protection foi um cabeçalho não padrão introduzido para habilitar ou desabilitar as proteções do navegador contra ataques Cross-site Scripting (XSS). Na prática, esse cabeçalho era frequentemente fácil para os invasores ignorarem e, como resultado, é ignorado pela maioria dos navegadores modernos.

Pinos de chave pública

O cabeçalho de segurança HTTP Public-Key-Pins usado para configurar o recurso de segurança Public Key Pinning (HPKP) que foi introduzido no Google Chrome e no Firefox para evitar falsificação de certificado TLS. O HPKP funcionou fazendo com que o servidor da Web fornecesse ao navegador um conjunto de hashes criptográficos das chaves públicas do certificado TLS que o site usava, que o navegador, por sua vez, usaria para comparar com os certificados que recebe do servidor em solicitações subsequentes. O problema era que o HPKP era bastante complicado de gerenciar e frequentemente resultava em configurações incorretas que podiam desabilitar completamente o acesso ao site — como tal, não é mais recomendado usá-lo.

Adicionando cabeçalhos de segurança HTTP no WordPress

Os cabeçalhos de segurança HTTP funcionam melhor quando configurados em seu servidor web ou, quando aplicável, sua rede de entrega de conteúdo (CDN) ou firewall de aplicativo da web. Isso permite que eles sejam enviados a cada solicitação. Alternativamente, embora menos ideal, você pode usar um plugin do WordPress para definir esses cabeçalhos para você.

Agora que abordamos o objetivo dos cabeçalhos de segurança HTTP, aqui estão algumas maneiras de habilitá-los em seu site WordPress.

Adicionando cabeçalhos de segurança HTTP no WordPress usando o Apache HTTP Server

Veja a seguir um exemplo da configuração do Apache HTTP Server necessária para habilitar o HTTP Strict Transport Security (HSTS), X-Content-Type-Options e uma política de segurança de conteúdo simples.


<ifModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000"
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "default-src 'self'"
</ifModule>

Adicionando cabeçalhos de segurança HTTP no WordPress usando Nginx

Da mesma forma, a seguir está um exemplo da configuração para Nginx necessária para habilitar HTTP Strict Transport Security (HSTS), X-Content-Type-Options e uma política de segurança de conteúdo simples.


server {
add_header Strict-Transport-Security "max-age=31536000; always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
}

Adicionando cabeçalhos de segurança HTTP no WordPress usando um plugin

Como alternativa, embora menos eficaz (já que depende do próprio WordPress para modificar os cabeçalhos), usar um plug-in do WordPress pode ser a maneira mais fácil de adicionar cabeçalhos de segurança HTTP ao seu site WordPress. Plugins como o plugin de redirecionamento permitem que você adicione cabeçalhos HTTP personalizados ao seu site.

Como verificar cabeçalhos de segurança HTTP para um site

Depois de adicionar cabeçalhos de segurança HTTP em seu site WordPress, você deve certificar-se de que eles estão configurados corretamente e funcionando como você espera. A maneira mais fácil de testar isso é usando uma ferramenta gratuita chamada Security Headers 6 .

Usar a ferramenta Security Headers é tão simples quanto inserir a URL do seu site e clicar em “Scan”. Você receberá uma nota de A+ a F junto com uma explicação de como essa nota foi determinada.

Referências usadas neste artigo [ + ]

Referências usadas neste artigo
1 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
2 https://owasp.org/www-project-secure-headers/#http-strict-transport-security
3 https://web.dev/what-is-mixed-content/
4 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
5 https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#mime_sniffing
6 https://securityheaders.com/