← Todas as verificações
SegurançaSeveridade típica: Baixo

Scanner de HSTS fraco

Deteta um cabeçalho HSTS com max-age muito baixo ou sem includeSubDomains que deixa brechas para downgrade.

O que verifica

Este scanner revê o teu cabeçalho HSTS e deteta quando tem um max-age demasiado baixo ou lhe falta o atributo includeSubDomains. Com isso identifica configurações de HSTS que deixam brechas aproveitáveis.

Porque importa

O HSTS obriga os navegadores a usar sempre HTTPS com o teu site, mas se a sua duração for muito curta ou não cobrir os subdomínios, ficam janelas em que um atacante pode forçar uma ligação sem cifra. Essa brecha permite ataques de downgrade que intercetam o tráfego.

Como se corrige

Configura o cabeçalho HSTS com um max-age longo (habitualmente um ano, ou seja 31536000 segundos) e inclui includeSubDomains para cobrir todo o domínio. Isto costuma fazer-se na configuração do servidor ou do CDN, e convém testá-lo antes com um valor menor se não tiveres a certeza.

Como funciona esta verificação

Este check só atua se o teu site já envia o cabeçalho Strict-Transport-Security; se falta por completo, marca-o o scanner de cabeçalhos. O Scanaris lê o valor e verifica duas coisas: que o max-age é de pelo menos um ano (31536000 segundos) e que inclui includeSubDomains. Se qualquer uma falhar, abre um achado de severidade baixa com o detalhe. É baixa porque um HSTS curto ou parcial continua a proteger alguma coisa; mas deixa buracos que um atacante pode aproveitar.

O que faz o HSTS e porquê os dois atributos

Quando o navegador recebe este cabeçalho por HTTPS, aponta o teu domínio numa lista interna e, durante o tempo que o max-age disser, converte qualquer tentativa de ir por http:// em https:// antes de enviar o que quer que seja. Isso elimina o primeiro pedido sem cifragem que um redirecionamento não consegue evitar. Um max-age de umas horas ou dias deixa o utilizador desprotegido de cada vez que expira; daí o mínimo de um ano. Sem includeSubDomains, um atacante pode atacar qualquercoisa.oteudominio.com por HTTP e, pela forma como funcionam os cookies de domínio, roubar ou fixar cookies que valem para o site principal.

Como corrigir

O valor recomendado:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • Vercel: põe-no por defeito nos domínios próprios; se usas vercel.json ou next.config para outros cabeçalhos, acrescenta-o aí com esse valor.
  • Netlify: no ficheiro _headers, sob /*.
  • Nuxt: em routeRules do nuxt.config, regra '/**'.
  • nginx: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; dentro do bloco server de 443.
  • Express: helmet.hsts({ maxAge: 31536000, includeSubDomains: true }).

Antes de acrescentares includeSubDomains, confirma que todos os teus subdomínios servem HTTPS: o painel de administração, a API, o blog noutro fornecedor, o subdomínio de email se tiver site. Qualquer um que só responda por HTTP deixará de funcionar nos navegadores que já viram o cabeçalho, e não há forma de o desfazer até expirar o max-age. Se não tens a certeza, começa com max-age=86400 e sem subdomínios, revê, e sobe o valor quando tudo funcionar.

Preload

Com preload e um max-age de pelo menos um ano podes pedir que o teu domínio entre na lista que o Chrome, o Firefox e o Safari trazem de fábrica: assim nem sequer a primeira visita vai por HTTP. É a diferença habitual entre um A e um A+ nas ferramentas de análise. Mas é um compromisso quase irreversível (sair da lista demora meses), por isso fá-lo só quando todo o domínio estiver há tempo em HTTPS sem incidentes.

Confirma que está corrigido

curl -sI https://oteudominio.com | grep -i strict-transport

Deve mostrar um max-age de 31536000 ou mais e includeSubDomains. Confirma no URL público: se tens uma CDN à frente, é ela que tem de o enviar.

Perguntas frequentes

O HSTS substitui o redirecionamento de HTTP para HTTPS?

Não. O cabeçalho só chega por HTTPS, por isso a primeira visita continua a precisar do redirecionamento. São complementares: o redirecionamento para a primeira vez, o HSTS para todas as outras.

Tenho um subdomínio interno que só vai por HTTP.

Então não ponhas includeSubDomains até o migrares, e aceita o achado de severidade baixa entretanto. Um subdomínio sem cifragem é um risco real para os cookies do domínio, por isso a migração vale a pena.

O que acontece se o configurar mal?

Os navegadores que receberam o cabeçalho vão lembrar-se da política até expirar. Podes enviar max-age=0 para lhes pedir que a esqueçam, mas só o verão os que voltarem a visitar-te por HTTPS. Por isso convém começar com valores curtos.

Verifica-o no teu site

Analisa o teu site grátis e vê se esta e outras 44 verificações passam, com um fix prompt por cada problema.

Analisar o meu site grátis

Do blog

Verificações relacionadas