O que é HSTS?
HSTS (HTTP Strict Transport Security) é um mecanismo de segurança web que diz aos navegadores interagir apenas com um site sobre HTTPS, nunca HTTP. Uma vez que um navegador vê um header HSTS, ele automaticamente fará upgrade de todas as requisições futuras para HTTPS e se recusará a se conectar sobre HTTP simples, mesmo se o usuário explicitamente digitar http://.
Por que HSTS é Importante
Mesmo com um certificado SSL válido, vulnerabilidades existem:
Ataque de SSL Stripping
1. Usuário digita "example.com" (sem https://)
2. Atacante intercepta a requisição HTTP inicial
3. Atacante proxy para HTTPS, apresenta HTTP para usuário
4. Usuário pensa que está seguro, mas atacante vê tudo
HSTS previne isto garantindo que navegadores nunca façam aquela requisição HTTP inicial.
Benefícios de HSTS
- Previne ataques de downgrade: Nenhum fallback HTTP possível
- Protege bookmarks de usuário: Mesmo bookmarks HTTP antigos se tornam HTTPS
- Elimina conteúdo misto: Subrecursos também forçados a HTTPS
- Melhora desempenho: Nenhum redirecionamento HTTP→HTTPS necessário
Sintaxe de Header HSTS
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Diretivas
| Diretiva | Descrição |
|---|---|
| max-age | Segundos para lembrar HSTS (31536000 = 1 ano) |
| includeSubDomains | Aplicar HSTS a todos os subdomínios |
| preload | Consentimento para inclusão em lista de pré-carregamento do navegador |
Implementando HSTS
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Cloudflare
Habilitar em SSL/TLS → Certificados de Borda → HTTP Strict Transport Security
Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
Lista de Pré-carregamento HSTS
A lista de pré-carregamento HSTS é uma lista de domínios hardcoded nos navegadores que devem ser acessados apenas sobre HTTPS. Isto elimina mesmo a vulnerabilidade de primeira requisição HTTP.
Requisitos de Pré-carregamento
1. Certificado SSL válido
2. Redirecionar todo HTTP para HTTPS
3. Header HSTS com:
- max-age pelo menos 31536000 (1 ano)
- Diretiva includeSubDomains
- Diretiva preload
4. Todos os subdomínios devem suportar HTTPS
Submetendo à Lista de Pré-carregamento
1. Verificar requisitos: Use hstspreload.org para verificar
2. Submeter domínio: Digitar domínio em hstspreload.org
3. Aguardar inclusão: Leva semanas a meses para atualizações de navegador
Avisos de Pré-carregamento
Pré-carregamento é permanente (praticamente). Remover da lista leva meses e exige atualizações de navegador. Apenas pré-carregue se você tiver certeza de que todos os subdomínios suportarão HTTPS indefinidamente.Verificando HSTS
DevTools do Navegador:1. Abrir DevTools → Aba Network
2. Carregar o site
3. Verificar Response Headers para Strict-Transport-Security
Usando curl:curl -I https://example.com | grep -i strict
Usando DomScan:
curl "https://domscan.net/v1/health?domain=example.com"
# Relata hasHSTS em detalhes de segurança
Status de Pré-carregamento:
Verificar hstspreload.org para ver se um domínio é pré-carregado.
Estratégia de Desdobramento HSTS
Fase 1: max-age Curto
Comece com um max-age curto para testar:
Strict-Transport-Security: max-age=300
Se algo quebra, usuários apenas cachearam por 5 minutos.
Fase 2: Aumentar Duração
Depois de confirmar que HTTPS funciona em todos os lugares:
Strict-Transport-Security: max-age=86400
Fase 3: Adicionar Subdomínios
Uma vez que todos os subdomínios suportam HTTPS:
Strict-Transport-Security: max-age=2592000; includeSubDomains
Fase 4: Desdobramento Completo + Pré-carregamento
Depois de meses de operação estável:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Depois submeta à lista de pré-carregamento.
Problemas Comuns com HSTS
Subdomínio sem HTTPS: includeSubDomains quebra aquele subdomínio Ambientes de Desenvolvimento: HSTS cacheado de produção quebra dev local Headers de CDN/Proxy: Garanta que header HSTS não seja descartado por intermediários Conteúdo Misto: Todos os recursos devem ser HTTPS; HSTS não corrige recursos HTTP embutidosHSTS é essencial para qualquer site manipulando dados sensíveis e fortemente recomendado para todos os sites HTTPS.