Parte 7 da série "Segurança Web na UE: 10 Passos Para uma Melhor Classificação"
X-Content-Type-Options
O Problema
Os navegadores por vezes tentam "adivinhar" o tipo de um ficheiro — independentemente do cabeçalho Content-Type. Uma imagem que na realidade contém JavaScript? O navegador executa-o. Isto chama-se MIME sniffing e é uma porta de entrada para ataques de injeção.
A Solução
X-Content-Type-Options: nosniff
Um cabeçalho, um valor. O navegador apenas aceita ficheiros com o tipo MIME declarado.
Adoção: 27,7%. Quase três quartos dos websites da UE estão vulneráveis a ataques de confusão MIME.
Como Configurar
Nginx:
add_header X-Content-Type-Options "nosniff" always;
Apache:
Header always set X-Content-Type-Options "nosniff"
Existe apenas um valor válido (nosniff), sem configuração, sem efeitos secundários. Não há razão para não o definir.
Referrer-Policy
O Problema
Quando um utilizador clica numa ligação externa no seu website, o navegador envia por defeito o URL completo da página de origem no cabeçalho Referrer. Isto pode revelar informações sensíveis:
https://o-seu-dominio.pt/painel?utilizador=12345&token=abchttps://o-seu-dominio.pt/admin/relatorios/auditoria-confidencialhttps://o-seu-dominio.pt/pesquisa?q=sintomas+medicos
O operador do website de destino vê o URL completo — incluindo parâmetros de consulta, caminhos e tokens de sessão.
A Solução
Referrer-Policy: strict-origin-when-cross-origin
Com esta política, o navegador envia:
- Ao navegar para outro domínio: apenas a origem (https://o-seu-dominio.pt), sem caminhos
- Dentro do seu próprio domínio: o URL completo (útil para analítica)
- Em downgrade de HTTPS para HTTP: nada
Adoção: 13,1%.
Como Configurar
Nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Apache:
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Políticas Alternativas
| Política | Comportamento | Recomendação |
|---|---|---|
no-referrer |
Nunca envia referrer | Demasiado restritivo (parte a analítica) |
origin |
Envia sempre apenas a origem | Bom, mas perde caminhos internos |
strict-origin-when-cross-origin |
Origem entre domínios, completo internamente | Recomendado |
same-origin |
Completo internamente, nada externamente | Bom para aplicações sensíveis |
Ambos Juntos: O Excerto Nginx
# Cabeçalhos de segurança — pronto a copiar
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Quatro cabeçalhos, quatro linhas. Na sua configuração Nginx ou num ficheiro include. Combinados com as Partes 1-3 desta série, cobrem os seis cabeçalhos de segurança mais importantes.
Verifique os Seus Cabeçalhos
Na próxima semana na Parte 8: Registos CAA — que autoridade de certificação pode emitir certificados para o seu domínio?