Como adicionar cabeçalhos de segurança usando Cloudflare

cabeçalhos de segurança

O que são cabeçalhos de segurança?

Sempre que um navegador solicita uma página de um servidor web, o servidor responde com o conteúdo junto com “cabeçalhos”. Alguns cabeçalhos contêm metadados de conteúdo, como quando a página foi modificada pela última vez. Outros incluem o nome e a versão do servidor web, cookies, se o navegador deve armazenar o conteúdo em cache, etc. Os cabeçalhos de segurança são cabeçalhos que permitem que você diga ao navegador do seu cliente como se comportar ao manipular o conteúdo do seu site. Por exemplo, um cabeçalho pode especificar “não me abra dentro de um quadro(iframe)” ou “fale comigo apenas por HTTPS”. Existem vários tipos de cabeçalhos de segurança com funções distintas.

Por que os cabeçalhos de segurança são tão importantes?

Prevenção de ataques: Os cabeçalhos de segurança ajudam a prevenir uma série de ataques comuns.
XSS (Cross-Site Scripting): Impedem que scripts maliciosos sejam executados no navegador do usuário.
Clickjacking: Evitam que um site seja embutido em outro de forma enganosa, forçando o usuário a realizar ações indesejadas.
Injeção: Dificultam a injeção de código malicioso em formulários e outros pontos de entrada.
Proteção de dados: Ao configurar corretamente os cabeçalhos de segurança, você pode garantir que os dados sensíveis dos seus usuários sejam transmitidos de forma segura, usando protocolos criptografados como HTTPS.
Melhora da reputação do site: Sites seguros tendem a ter uma melhor classificação nos resultados de busca e a gerar mais confiança nos usuários.

Tipos de cabeçalhos de segurança

A seguir seguem os cabeçalhos de segurança que iremos abordar nesse post e função.

X-Content-Type-Options

O cabeçalho de segurança X-Content-Type-Options é uma configuração de segurança HTTP que ajuda a proteger contra ataques baseados em interpretação errada do tipo de conteúdo, como o MIME sniffing.
Ele instrui o navegador a não tentar adivinhar o tipo de conteúdo dos arquivos, utilizando apenas o tipo MIME declarado pelo servidor.

Por que o MIME sniffing é perigoso?

  • O MIME sniffing ocorre quando o navegador tenta determinar o tipo de arquivo analisando seu conteúdo, ignorando o que foi especificado pelo servidor no cabeçalho Content-Type.
  • Isso pode levar a problemas de segurança.
  • Execução de scripts maliciosos: Um arquivo enviado como texto pode ser interpretado erroneamente como HTML ou JavaScript, permitindo ataques de Cross-Site Scripting (XSS).
  • Download inseguro de arquivos: Arquivos maliciosos podem ser executados automaticamente no navegador se o tipo MIME for interpretado de forma incorreta.
X-Frame-Options

O cabeçalho de segurança X-Frame-Options é uma configuração de segurança HTTP que ajuda a proteger os sites contra ataques de Clickjacking. Ele controla se uma página pode ou não ser exibida dentro de um iframe em outros sites, impedindo que conteúdo legítimo seja carregado em contextos maliciosos.

X-XSS-Protection

O cabeçalho de segurança de resposta HTTP X-XSS-Protection é uma medida de segurança criada para atenuar os ataques de XSS (Cross-Site Scripting). Os ataques XSS envolvem a injeção de scripts mal-intencionados em páginas da Web, que podem ser executados por usuários desavisados.

Strict-Transport-Security

O cabeçalho de segurança Strict-Transport-Security (também conhecido como HSTS – HTTP Strict Transport Security) é uma configuração de segurança HTTP que força os navegadores a acessarem um site apenas por meio de conexões seguras (HTTPS). Ele ajuda a prevenir ataques de downgrade e man-in-the-middle (MITM), protegendo a comunicação entre os usuários e o servidor.

Referrer-Policy

O cabeçalho de segurança Referrer-Policy é essencial para proteger a privacidade do usuário e evitar a exposição de informações sensíveis através do cabeçalho Referer. Escolher a política correta depende do nível de privacidade e das necessidades da aplicação. Configurar corretamente este cabeçalho é uma prática recomendada de segurança para qualquer site moderno.

Content Security Policy

O cabeçalho de segurança Content Security Policy (CSP) é um mecanismo de segurança avançado que ajuda a atenuar uma ampla gama de vulnerabilidades de aplicativos da Web, principalmente ataques de XSS (Cross-Site Scripting). Ele funciona definindo uma lista branca de fontes confiáveis a partir das quais o navegador pode carregar recursos como scripts, folhas de estilo e imagens.

Observação: Se não tivéssemos utilizando o cloudflare seria necessário criar instruções no Web Server do servidor(NGINX, Apache, Litespeed…)

1- Acesse sua conta no cloudflare, clique no domínio que iremos implementar as security headers.

2- em DNS certifique-se que na entrada do tipo A com o nome de seu domínio esteja com a nuvem laranja.(faça o mesmo com www).

dns proxied

3 – Na coluna da esquerda, clique no menu Rules e em overview:

rules cloudflare

4 – Localize “Response Header Transform Rules” e clique a frente em create rule

Em Rule name, dê um nome para identificar suas rules. Exemplo: cabeçalhos de segurança

5 – Em If incoming requests match…marque a opção “All incoming requests” e em Then…

selecione Set static. Nos campos Header name e value você deverá preencher cada um com o conteúdo abaixo:

cabeçalhos de segurança

Abaixo segue o nome do header e o valor que iremos utilizar.

Header nameValue
x-content-type-optionsnosniff
x-frame-optionsSAMEORIGIN
x-xss-protection1; mode=block
strict-transport-securitymax-age=31536000; includeSubDomains; preload
referrer-policyno-referrer-when-downgrade
content-security-policyupgrade-insecure-requests; block-all-mixed-content
permissions-policyaccelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=()

Seguindo a tabela acima preencha o Header name e valor. Ao final clique em deploy para ativar os headers.

Ao terminar, você terá este resultado.

security reader

Agora vamos testar se os cabeçalhos de segurança estão ok em seu site. Acesse https://securityheaders.com/ , digite seu domínio e a seguir botão scan. Você terá este resultado:

Security Headers