Verificador de Cabeçalhos de Segurança HTTP
Dê nota aos cabeçalhos de segurança HTTP de um site e veja o que cada ausência expõe.
🌐 sitekits fetches the URL server-side (private/internal addresses are blocked). Only response headers are read — the body is never retrieved.
Visão geral
Os cabeçalhos de segurança são a parte da defesa de um site que vive inteiramente
na resposta, o que os torna fáceis de verificar e fáceis de errar de forma subtil.
Um cabeçalho pode estar presente e não fazer nada: max-age=0 desliga o HSTS, uma
CSP que contém 'unsafe-inline' executa igualmente um <script> injetado, e
X-Frame-Options: ALLOW-FROM é ignorado por todos os navegadores distribuídos hoje.
Este verificador recupera o URL do lado do servidor, lê apenas os cabeçalhos da resposta e classifica sete pontos numa escala ponderada de 100. Os pesos refletem o que cada um evita realmente, e cada nota vem acompanhada de uma observação que nomeia a exposição concreta em vez de um genérico «cabeçalho ausente».
Como usar
- Cole um URL. O esquema pode ser omitido; assume-se
https. - Leia a classificação e as notas por ponto.
- Percorra as observações. Cada uma descreve o que fica exposto, não apenas o que falta.
O que significam os pesos
Contar cabeçalhos trata cada falta como equivalente. Não é: um X-Frame-Options
ausente pode ser coberto por frame-ancestors na CSP, enquanto uma CSP ausente não
tem substituto algum.
| Ponto | Peso | Motivo |
|---|---|---|
Content-Security-Policy | 25 | O único cabeçalho que impede um script injetado de executar e exfiltrar |
Strict-Transport-Security | 20 | Evita que o primeiro pedido seja rebaixado para HTTP |
| Proteção contra enquadramento | 15 | Clickjacking; satisfeita por CSP frame-ancestors ou X-Frame-Options |
X-Content-Type-Options | 10 | Um content-type errado reinterpretado como script |
Referrer-Policy | 10 | Quanto dos seus URL escapa para outras origens |
Permissions-Policy | 10 | Câmara, microfone e geolocalização deixados implicitamente abertos |
| Divulgação de versão | 10 | Uma dedução, não uma proteção — ver abaixo |
Como os valores são lidos
A CSP parte de 100 e perde pontos por aquilo que realmente a enfraquece.
'unsafe-inline' no script-src efetivo custa 45 — mas apenas se não houver nonce
nem hash, porque os navegadores que os compreendem ignoram então por completo o
'unsafe-inline'. 'unsafe-eval' custa 20. Um base-uri ausente custa 15: sem ele,
um elemento <base> injetado reescreve todos os URL relativos da página, incluindo
as origens dos scripts. Um object-src 'none' ausente custa 10.
Content-Security-Policy-Report-Only sozinho obtém zero, porque nada é bloqueado —
é um instrumento de medição, não uma defesa.
O HSTS é classificado por max-age: um ano ou mais chega a 80, seis meses a 60,
menos do que isso 35, e max-age=0 obtém 0 porque desliga o HSTS.
includeSubDomains acrescenta 20, e é essa soma que leva um cabeçalho correto a
100. Seis meses é também o mínimo da lista de pré-carregamento dos navegadores, pelo
que um valor mais curto não pode ser pré-carregado, qualquer que seja a intenção.
A proteção contra enquadramento é satisfeita por CSP frame-ancestors com a
nota máxima, ou por X-Frame-Options: DENY/SAMEORIGIN com 60 — continua a
funcionar, mas a especificação avançou. ALLOW-FROM obtém 0: o Chrome nunca o
implementou e o Firefox removeu-o na versão 70, pelo que uma página que dependa dele
pode ser enquadrada.
A divulgação de versão é a única dedução. Server: Apache/2.4.41 e
X-Powered-By: PHP/7.4.3 indicam a um atacante exatamente que CVE publicadas
experimentar, e nenhum dos dois protege coisa alguma. Um valor sem versão como
Server: cloudflare não é penalizado: a maioria das CDN envia-o sempre e não é
possível removê-lo, pelo que pontuá-lo seria uma marca que ninguém consegue corrigir.
O que esta ferramenta não consegue ver
Os cabeçalhos são apenas uma camada. Uma pontuação perfeita não diz nada sobre a sua configuração TLS, sobre os atributos dos seus cookies, sobre se a autenticação é efetivamente imposta, ou sobre se a sua CSP autoriza uma origem que aloja ela mesma conteúdo controlado por um atacante.
Os atributos de Set-Cookie em particular não são classificados, porque são por
cookie e não por resposta: um cookie de sessão sem HttpOnly e Secure é um
problema sério que nenhuma classificação de cabeçalhos lhe mostrará.
A CSP é também classificada pela sintaxe e pelas palavras-chave, não pela sua lista
de permissões. Uma política script-src 'self' https://cdn.example.com obtém a nota
máxima, e se essa CDN servir JavaScript enviado por utilizadores a política não
oferece proteção nenhuma. A nota mede a forma da política; as origens são para o
utilizador julgar.
Exemplos
- Verificar se uma alteração chegou à produção — classifique o URL antes e depois de uma mudança de configuração na CDN. Cabeçalhos definidos na origem são frequentemente removidos ou sobrepostos por um proxy, e esta é a forma mais rápida de ver a resposta tal como os navegadores a recebem.
- Explicar um achado a uma equipa — as observações enunciam o mecanismo, o que convence mais do que um nome de cabeçalho numa folha de auditoria.
- Verificar o destino de uma redireção — os cabeçalhos classificados são os da resposta final. Uma página de entrada que redireciona para outro anfitrião aterra muitas vezes num local sem nenhum dos cabeçalhos que o ponto de entrada tinha.
- Antes de pedir o pré-carregamento de HSTS — a submissão exige um
max-agede pelo menos um ano, maisincludeSubDomainsepreload. O pré-carregamento é difícil de desfazer, pelo que deve confirmar antes o cabeçalho em cada subdomínio. - Construir a própria política — o gerador de CSP monta o cabeçalho diretiva por diretiva, e cabeçalhos HTTP mostra a resposta completa em bruto quando precisa dos valores literais.
Observações
São classificados os cabeçalhos da resposta final. Se o URL redireciona, a classificação descreve onde se chega, e a cadeia é mostrada para detetar um ponto de entrada cujos cabeçalhos diferem do seu destino.
Feature-Policy é aceite em vez de Permissions-Policy para o mesmo ponto, já que
alguns servidores continuam a emitir o nome antigo. Referrer-Policy obtém a nota
máxima com no-referrer, same-origin, strict-origin e
strict-origin-when-cross-origin; outros valores obtêm metade, porque deixam escapar
mais do URL entre origens do que o necessário.
Apenas cabeçalhos. Esta ferramenta nunca recupera, guarda ou reencaminha o corpo da resposta, e os pedidos para endereços privados, de loopback, link-local e reservados são recusados antes de qualquer ligação — incluindo depois de uma redireção. Os detalhes estão na política de privacidade.