06/02/2024
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.
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:
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.
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.
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.
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.
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.
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.
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.
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:
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.
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.