Headers de segurança · auditoria própria
Não é auditoria de prateleira: é o mesmo curl que qualquer pessoa roda, antes e depois do deploy, com data e valor de header na mesa. Antes: 3 de 7. Depois: 7 de 7.
Na prática: menos chance de o seu site ser usado para aplicar golpe em quem confia nele, de vazar o caminho de páginas internas e de abrir uma porta para script de terceiro.
O número de 49,7% vem do estudo da RackCrunch publicado em setembro de 2026: 2.331 de 4.688 domínios de negócios locais listados no diretório Curlie (EUA) não atendiam a nenhum dos sete critérios de header. Escopo e ressalvas no rodapé desta página.
Brandt Vistorias
3/77/7
brandtvistorias.com.br
BONI Marido de Aluguel
3/77/7
bonimaridodealuguel.com.br
Esta página
7/7
ryve-oferta.pages.dev
Medição em 30/10/2026, antes do deploy, no domínio próprio. Três critérios já passavam (HSTS, nosniff e Referrer-Policy). Quatro não existiam.
| Critério | Antes | Depois |
|---|---|---|
| Strict-Transport-Security | presente max-age=15552000; includeSubDomains 180 dias |
1 ano max-age=31536000; includeSubDomains critério de strong HSTS do estudo |
| Content-Security-Policy | ausente | aplicada default-src 'self' · script-src 'self' + GA4 · frame-ancestors 'none' · object-src 'none' valor completo no bloco de prova abaixo |
| X-Content-Type-Options | nosniff | nosniff |
| X-Frame-Options / frame-ancestors | ausente | DENY X-Frame-Options: DENY + frame-ancestors 'none' |
| Referrer-Policy | strict-origin-when-cross-origin | strict-origin-when-cross-origin |
| Permissions-Policy | ausente | declarada 9 features desligadas: camera, microphone, geolocation, payment, usb, accelerometer, gyroscope, magnetometer, browsing-topics |
| Cross-Origin-Opener-Policy | ausente | same-origin |
| A soma dos critérios atendidos é 3/7 antes e 7/7 depois. O HSTS já vinha da configuração da zona Cloudflare, não do deploy: estava em 180 dias e foi elevado para 1 ano na zona — é o único critério que não vive no repositório. | ||
Header de segurança não é selo: é comportamento de navegador. Cada linha abaixo é uma coisa que o site deixa de aceitar.
Limita de onde scripts, estilos e conexões podem vir. Sem ela, um script injetado em qualquer campo roda com a mesma permissão do site.
Impede que o site seja carregado dentro de um iframe alheio — o mecanismo do clickjacking, que faz o visitante clicar sem saber no quê.
Obriga o navegador a falar HTTPS com o domínio por um período fixo, inclusive antes de qualquer requisição HTTP acontecer.
Mata o "MIME sniffing": o navegador para de adivinhar o tipo de um arquivo e passa a respeitar o que o servidor declarou.
Controla o que a URL do seu site entrega ao site seguinte. Sem política, caminhos internos podem vazar no referrer.
Desliga por padrão câmera, microfone, geolocalização, pagamento e sensores para o site e para qualquer iframe embutido nele.
Isola a janela do site de janelas de outra origem — impede que a página aberta segure referência à sua e leia o que não devia.
Dois comandos. Qualquer pessoa com terminal reproduz — não tem painel, não tem nota de fornecedor no meio.
$ curl -sI https://brandtvistorias.com.br | grep -iE "^(strict|x-content|x-frame|referrer|permissions|cross-origin|content-security)" strict-transport-security: max-age=15552000; includeSubDomains x-content-type-options: nosniff referrer-policy: strict-origin-when-cross-origin # 4 critérios ausentes: CSP, X-Frame-Options/frame-ancestors, Permissions-Policy, COOP
$ curl -sI https://brandtvistorias.com.br | grep -iE "^(strict|x-content|x-frame|referrer|permissions|cross-origin|content-security)" strict-transport-security: max-age=31536000; includeSubDomains content-security-policy: default-src 'self'; script-src 'self' https://www.googletagmanager.com https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: blob: https://*.google-analytics.com https://www.googletagmanager.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com https://cloudflareinsights.com; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; object-src 'none'; upgrade-insecure-requests x-content-type-options: nosniff x-frame-options: DENY referrer-policy: strict-origin-when-cross-origin permissions-policy: camera=(), microphone=(), geolocation=(), payment=(), usb=(), accelerometer=(), gyroscope=(), magnetometer=(), browsing-topics=() cross-origin-opener-policy: same-origin # 7 de 7. GA4 continua carregando só depois do aceite do banner.
Os headers são servidos pelo edge a partir do arquivo _headers versionado no repositório — não foram digitados no painel. Isso importa: configuração que vive só no painel não sobrevive à próxima pessoa que mexer no projeto.
Trinta minutos e você recebe a lista do que falta, com o curl de antes e depois. Sem relatório de 40 páginas e sem nota inventada.
Resposta no mesmo dia útil. Se o seu site já estiver 7/7, a gente fala isso e não cobra nada.