HSTS preload: incluindo seu domínio na lista do navegador
1. O que é HSTS e por que ele não basta sozinho?
HTTP Strict Transport Security (HSTS) é um mecanismo de segurança que instrui navegadores a se comunicarem exclusivamente via HTTPS com um determinado domínio. Isso é feito através do cabeçalho HTTP Strict-Transport-Security:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Quando um navegador recebe esse cabeçalho, ele armazena a política e, nas próximas visitas, converte automaticamente qualquer link HTTP para HTTPS antes mesmo de fazer a requisição.
No entanto, o HSTS tradicional possui uma limitação crítica conhecida como TOFU (Trust on First Use). Na primeira visita ao site, se um atacante interceptar a conexão (ataque man-in-the-middle), ele pode redirecionar o usuário para uma versão falsa do site antes que o cabeçalho HSTS seja recebido. Essa janela de vulnerabilidade na primeira conexão é exatamente o que o HSTS Preload visa eliminar.
2. Como funciona a lista de pré-carregamento dos navegadores?
O HSTS Preload é uma lista hardcoded diretamente no código-fonte dos principais navegadores (Chrome, Firefox, Safari, Edge). Quando um domínio está nessa lista, o navegador força HTTPS desde o primeiro byte, sem jamais permitir uma conexão HTTP, mesmo que o usuário digite explicitamente http:// na barra de endereços.
A diferença fundamental é:
- HSTS via cabeçalho: depende da primeira conexão bem-sucedida para aprender a política
- HSTS via preload: a política já está gravada no navegador antes de qualquer requisição
O fluxo de consulta é direto: ao digitar um domínio, o navegador verifica se ele está na lista interna. Se estiver, toda comunicação é forçada a HTTPS, sem exceções.
3. Requisitos técnicos para inclusão no HSTS Preload
Para submeter um domínio ao preload, você precisa atender a requisitos rigorosos:
Cabeçalho HSTS obrigatório:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Os parâmetros exigidos são:
- max-age=31536000 (exatamente 1 ano, sem valor menor)
- includeSubDomains (aplica a política a todos os subdomínios)
- preload (sinaliza que o domínio deseja ser incluído na lista)
Requisitos adicionais:
- Certificado SSL válido e configurado corretamente
- Redirecionamento 301 ou 302 de HTTP para HTTPS em todo o domínio
- Todos os subdomínios (inclusive www) devem servir exclusivamente HTTPS
- O domínio raiz e todos os subdomínios devem servir o mesmo cabeçalho HSTS
Exemplo de configuração em servidor Nginx:
server {
listen 80;
server_name exemplo.com www.exemplo.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name exemplo.com www.exemplo.com;
ssl_certificate /caminho/certificado.pem;
ssl_certificate_key /caminho/chave.key;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
4. Passo a passo: submetendo seu domínio ao HSTS Preload
O processo de submissão é centralizado no site oficial hstspreload.org:
- Verificação automática: acesse
https://hstspreload.orge digite seu domínio. O site executará verificações automáticas: - Presença e validade do cabeçalho HSTS
- Configuração de redirecionamento HTTP para HTTPS
- Certificado SSL válido
-
Consistência entre domínio principal e subdomínios
-
Correção de problemas: se alguma verificação falhar, o site indicará exatamente o que precisa ser ajustado. Corrija e reexecute a verificação.
-
Submissão: após todas as verificações passarem, clique em "Submit" para enviar seu domínio à lista do Chrome (que alimenta os demais navegadores).
-
Tempo de propagação: a inclusão não é imediata. O Chrome atualiza sua lista a cada versão estável (aproximadamente a cada 6-8 semanas). Após a inclusão no Chrome, os demais navegadores sincronizam suas listas em seus próprios ciclos de atualização.
5. Riscos e considerações críticas para desenvolvedores
A inclusão no HSTS Preload é praticamente irreversível no curto prazo. Remover um domínio da lista exige:
- Solicitação manual no repositório do Chromium
- Aguardar a próxima atualização do navegador (semanas a meses)
- Mesmo após remoção, navegadores com versões antigas ainda forçarão HTTPS
Impactos críticos:
- Subdomínios: todos os subdomínios são forçados a HTTPS, incluindo aqueles que você não controla diretamente
- Ambientes de desenvolvimento: domínios como dev.exemplo.com ou staging.exemplo.com precisam estar preparados
- APIs legadas: serviços que ainda usam HTTP puro simplesmente deixarão de funcionar
- Serviços de terceiros: CDNs, analytics ou widgets carregados via HTTP em subdomínios serão bloqueados
Exemplo de problema comum:
# Cenário: domínio "exemplo.com" com preload ativo
# Subdomínio "api.exemplo.com" ainda em HTTP
# Resultado: usuários não conseguem acessar a API
# Navegador bloqueia a conexão antes mesmo de qualquer requisição
6. Boas práticas de implantação e rollback
Implantação progressiva:
1. Teste em homologação: configure o cabeçalho HSTS sem preload em ambiente de teste
2. Aumento gradual de max-age: comece com valores baixos e aumente progressivamente:
```text
# Semana 1: teste básico
Strict-Transport-Security: max-age=300
# Semana 2: aumentar confiança
Strict-Transport-Security: max-age=86400
# Semana 3: próximo do definitivo
Strict-Transport-Security: max-age=2592000; includeSubDomains
# Após validação completa: versão final
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
```
- Monitoramento contínuo: utilize ferramentas como
securityheaders.compara verificar periodicamente os cabeçalhos
Plano de contingência para remoção:
- Solicite remoção no repositório oficial do Chromium: https://github.com/chromium/hstspreload
- Prepare uma página de fallback explicando a indisponibilidade temporária
- Considere manter um canal de comunicação com usuários afetados
7. Casos de uso e quando evitar o HSTS Preload
Cenários ideais:
- Domínios de produção estáveis e maduros
- Todos os subdomínios sob controle total da equipe
- Infraestrutura 100% HTTPS desde o início
- Projetos com equipe dedicada de segurança
Situações para evitar:
- Startups em fase inicial com mudanças frequentes de infraestrutura
- APIs públicas que precisam suportar clientes legados
- Domínios com muitos subdomínios gerenciados por terceiros
- Ambientes com integrações que ainda dependem de HTTP
Alternativa ao preload: configure HSTS com max-age alto (ex.: 1 ano) mas sem a flag preload. Isso oferece proteção após a primeira visita, sem o risco de irreversibilidade. Combine com monitoramento ativo da primeira conexão.
8. Ferramentas e referências para o desenvolvedor
- hstspreload.org — Site oficial para verificação e submissão de domínios à lista de pré-carregamento
- securityheaders.com — Ferramenta de análise completa de cabeçalhos de segurança HTTP
- Repositório oficial da lista HSTS Preload (Chromium) — Código-fonte e issues para solicitação de remoção
- MDN Web Docs: Strict-Transport-Security — Documentação completa sobre o cabeçalho HSTS e seus parâmetros
- Mozilla Observatory — Ferramenta de auditoria de segurança que verifica configuração HSTS e preload