Como obter nota A+ na segurança do site com cabeçalhos HTTP

Veja como o uso de cabeçalhos HTTP podem melhorar a segurança e a privacidade do seu site

06/02/2024

Como obter nota A+ na segurança do site com cabeçalhos HTTP

Como obter nota A+ na segurança do site com cabeçalhos HTTP

Introdução

Manter um site seguro é fundamental no desenvolvimento web. Cabeçalhos HTTP de segurança são ferramentas importantes para isso. Eles ajudam a guiar os navegadores na forma como devem mostrar o conteúdo do site, protegendo contra ataques como cross-site scripting (XSS) e clickjacking.

Neste tutorial, vamos explicar o funcionamento e como você pode usar cada um destes cabeçalhos no arquivo .htaccess do seu site.

Content-Security-Policy

Este cabeçalho ajuda a proteger seu site contra ataques como cross-site scripting (XSS), bloqueando o carregamento conteúdo externo. Ele permite definir quais fontes de conteúdo são confiáveis.

Para um site que usa apenas conteúdo interno, use a seguinte configuração em seu arquivo .htaccess:

Header set Content-Security-Policy "default-src 'self';"

Esta configuração impede o carregamento de recursos de sites externos, como scripts, imagens, fontes e outros objetos. Trata-se de uma configuração extremamente rígida com a segurança e pode não se aplicar a todos os tipos de sites.

Alguns sites podem precisar de recursos externos para funcionar, como Google Analytics ou fontes do Google. Nesse caso, você pode configurar o CSP para permitir o carregamento de sites específicos:

Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://www.google-analytics.com; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com;"

Com essas regras, seu site pode carregar scripts e fontes de domínios confiáveis, mantendo restrições para outros tipos de conteúdo.

Veja mais opções do CSP para controlar o acesso a outros recursos:

  • script-src: Origens permitidas para scripts.
  • style-src: Origens permitidas para CSS.
  • img-src: Origens permitidas para imagens.
  • media-src: Origens permitidas para mídias (vídeo e áudio).
  • font-src: Origens permitidas para fontes.
  • connect-src: Restringe as conexões do site (APIs como Fetch e WebSocket).
  • frame-src: Previne clickjacking, limitando origens para frames.
  • report-uri: Endereço para enviar relatórios de violações.

Essas diretivas ajudam a ajustar a segurança do seu site sem perder a funcionalidade. Lembre-se de verificar as dependências externas do seu site para não bloquear conteúdos essenciais acidentalmente.

Cross-Origin-Resource-Policy e Access-Control-Allow-Origin

O cabeçalho Cross-Origin-Resource-Policy (CORP) protege seus recursos, como imagens e scripts, de serem usados sem permissão por outros sites. Diferente do Content-Security-Policy (CSP), que controla quais recursos externos seu site pode solicitar, o CORP determina quem pode carregar os recursos do seu site.

Prática recomendada de segurança:

Header set Cross-Origin-Resource-Policy "same-origin"

Com a configuração acima, somente o seu site tem permissão para acessar seus próprios recursos, prevenindo o acesso por sites externos.

Para flexibilidade, same-site permite que seus recursos sejam acessados entre subdomínios do mesmo domínio, protegendo ainda assim contra acessos de sites completamente externos.

Se precisar permitir que domínios específicos tenham acessos a recursos do seu site, use o cabeçalho Access-Control-Allow-Origin:

# Lista dos sites autorizados
SetEnvIf Origin "https://seusite.com" ALLOW_ORIGIN=$0
SetEnvIf Origin "https://siteespecifico.com" ALLOW_ORIGIN=$0

# Definir Access-Control-Allow-Origin se a origem for permitida
Header set Access-Control-Allow-Origin %{ALLOW_ORIGIN}e env=ALLOW_ORIGIN

Ajuste os endereços seusite.com e siteespecifico.com conforme necessário para compartilhar recursos do seu site de forma segura.

X-Content-Type-Options

Este cabeçalho evita que os navegadores tentem adivinhar o tipo MIME de um documento, um processo chamado "sniffing". Ao fazer isso, ele obriga o navegador a respeitar o tipo MIME especificado pelo servidor. Isso é crucial para prevenir que arquivos considerados não executáveis sejam tratados como executáveis, ajudando a minimizar vulnerabilidades de segurança.

Header set X-Content-Type-Options "nosniff"

Implementando esta configuração no seu arquivo .htaccess, você desativa a capacidade de sniffing do navegador, fortalecendo a proteção do seu site.

X-Frame-Options

Este cabeçalho protege seu site contra ataques de clickjacking, restringindo como sua página pode ser embutida em frames por outros sites. Configurá-lo adequadamente impede que invasores enganem usuários para clicar em algo diferente do que aparece.

Header set X-Frame-Options "SAMEORIGIN"

Com "SAMEORIGIN", só frames do mesmo domínio podem exibir o conteúdo. Outros valores incluem:

  • DENY: Bloqueia todos os frames, mesmo do mesmo domínio.
  • SAMEORIGIN: Permite frames do mesmo domínio.
  • ALLOW-FROM uri: Permite frames de um URI específico (menos suportado).

Escolher o valor correto depende das necessidades específicas do seu site e do nível desejado de proteção.

Strict-Transport-Security

O cabeçalho Strict-Transport-Security reforça a segurança do seu site ao exigir que os navegadores utilizem apenas conexões HTTPS. Isso é crucial para proteger contra ataques que interceptam dados ou tentam rebaixar conexões de HTTPS para HTTP.

Header set Strict-Transport-Security "max-age=31536000"

O parâmetro max-age=31536000 define que a configuração é válida por um ano, garantindo que a proteção HTTPS seja mantida durante esse período.

Antes de usar esta configuração, certifique-se de que sua hospedagem possui um certificado SSL válido para seu domínio. Se seu site está hospedado na MCO2, não se preocupe, todos os domínios hospedados recebem um certificado SSL, que é configurado e renovado automaticamente.

Referrer-Policy

Quando um usuário clica em um link ou uma imagem é incorporada de um site para outro, os navegadores geralmente enviam um cabeçalho Referer que indica a origem da solicitação. O cabeçalho Referrer-Policy permite controlar essa informação de referência, decidindo quanta informação é compartilhada entre sites.

A política strict-origin-when-cross-origin é recomendada para um bom equilíbrio entre privacidade e funcionalidade, permitindo enviar a URL completa apenas para solicitações dentro do mesmo domínio, o domínio de origem para solicitações entre domínios e bloqueando o envio do referer em solicitações de HTTPS para HTTP.

Header set Referrer-Policy "strict-origin-when-cross-origin"

Outras opções válidas para o cabeçalho Referrer-Policy:

  • no-referrer: Não envia o cabeçalho Referer.
  • no-referrer-when-downgrade: Padrão quando nenhum cabeçalho é especificado. Não envia Referer de HTTPS para HTTP.
  • origin: Envia apenas o domínio de origem para todas as solicitações.
  • origin-when-cross-origin: Envia a URL completa para solicitações dentro do mesmo domínio e apenas o domínio para solicitações entre domínios.
  • same-origin: Envia o Referer apenas para solicitações dentro do mesmo domínio.
  • strict-origin: Semelhante a origin, mas não envia Referer de HTTPS para HTTP.
  • strict-origin-when-cross-origin: Recomendado. Envia a URL completa para o mesmo domínio e apenas o domínio para outros domínios, sem enviar Referer de HTTPS para HTTP.
  • unsafe-url: Envia a URL completa, independentemente do tipo de solicitação. Esta não é uma configuração recomendada.

A escolha da política de referência certa é crucial para proteger informações sensíveis enquanto mantém a funcionalidade do site.

Permissions-Policy

O cabeçalho Permissions-Policy permite que você especifique quais recursos e APIs web, como câmera, microfone e geolocalização, seu site pode utilizar. Esta é uma ferramenta poderosa para aumentar a segurança e a privacidade, limitando o acesso a funcionalidades potencialmente sensíveis.

Para maximizar a segurança, comece desativando todos os recursos sensíveis:

Header set Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()"

Depois, você pode decidir habilitar certos recursos, como câmera e geolocalização, apenas para o seu site ou para sites específicos:

Header set Permissions-Policy "accelerometer=(), camera=(self), geolocation=(self https://outrosite.com), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()"

Recomendação Final: Selecionar cuidadosamente os recursos no Permissions-Policy é essencial. Começar com uma configuração restritiva e abrir exceções para recursos específicos conforme necessário pode equilibrar segurança, privacidade e funcionalidade. Realizar testes e revisões periódicas das configurações garante que seu site se mantenha seguro e alinhado com as práticas recomendadas.

Para detalhes sobre todos os atributos que podem ser controlados pelo Permissions-Policy e instruções para sua implementação, visite a documentação do MDN Web Docs sobre Permissions-Policy.

Agrupando todos os cabeçalhos em uma única configuração

A configuração a seguir mostra como combinar todos os cabeçalhos de segurança que discutimos, aumentando a segurança do seu site de maneira completa:

Header set Content-Security-Policy "default-src 'self';"
Header set Cross-Origin-Resource-Policy "same-origin"
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
Header set Strict-Transport-Security "max-age=31536000"
Header set Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=()"

Veja o impacto de cada configuração no seu site:

  • Content-Security-Policy: Bloqueia conteúdo de fontes não aprovadas, evitando ataques como XSS.
  • Cross-Origin-Resource-Policy: Restringe o uso dos recursos do seu site a apenas o seu próprio domínio.
  • X-Content-Type-Options: Elimina a adivinhação do tipo MIME pelo navegador, aumentando a segurança.
  • X-Frame-Options: Previne o uso do seu site em iframes de outros sites, protegendo contra clickjacking.
  • Strict-Transport-Security: Garante que o site use sempre HTTPS, protegendo a comunicação.
  • Permissions-Policy: Controla o acesso a APIs e recursos sensíveis, permitindo apenas o uso quando explicitamente permitido.

Embora as configurações acima representem um nível elevado de proteção, tenha em mente que você precisará as suas configurações de acordo com as necessidades específicas do seu site e eventualmente flexibilizar algumas das configurações acima.

Testando sua configuração

Após configurar os cabeçalhos de segurança, é importante testar todas as áreas do seu site e verificar se estão funcionando corretamente.

Use a ferramenta online SecurityHeaders.com para checar a segurança dos cabeçalhos do seu site antes e depois das mudanças. Isso mostra como você melhorou a proteção do site.

Domínios hospedados
Clientes satisfeitos