¿Qué es HSTS?
HSTS (Seguridad Estricta de Transporte HTTP) es un mecanismo de seguridad web que dice a los navegadores que solo interactúen con un sitio web sobre HTTPS, nunca HTTP. Una vez que un navegador ve un encabezado HSTS, automáticamente actualizará todas las solicitudes futuras a HTTPS y se negará a conectar sobre HTTP plano, incluso si el usuario escribe http:// explícitamente.
Por qué HSTS es importante
Incluso con un certificado SSL válido, existen vulnerabilidades:
Ataque SSL Stripping
1. El usuario escribe "ejemplo.com" (sin https://)
2. Un atacante intercepta la solicitud HTTP inicial
3. El atacante hace proxy a HTTPS, presenta HTTP al usuario
4. El usuario cree que es seguro, pero el atacante ve todo
HSTS previene esto asegurando que los navegadores nunca hagan esa solicitud HTTP inicial.
Beneficios de HSTS
- Previene ataques de degradación: Ningún respaldo a HTTP es posible
- Protege marcadores de usuario: Incluso marcadores HTTP antiguos se convierten en HTTPS
- Elimina contenido mixto: Subrecursos también se fuerzan a HTTPS
- Mejora el rendimiento: Sin redirecciones HTTP→HTTPS necesarias
Sintaxis del encabezado HSTS
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Directivas
| Directiva | Descripción |
|---|---|
| max-age | Segundos para recordar HSTS (31536000 = 1 año) |
| includeSubDomains | Aplica HSTS a todos los subdominios |
| preload | Consentimiento para inclusión en lista de precarga de navegador |
Implementación de 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
Habilita en SSL/TLS → Certificados de borde → Seguridad estricta de transporte HTTP
Express.js
const helmet = require('helmet');
app.use(helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true
}));
Lista de precarga de HSTS
La lista de precarga de HSTS es una lista de dominios codificados en navegadores que solo deberían ser accedidos sobre HTTPS. Esto elimina incluso la vulnerabilidad de la primera solicitud HTTP.
Requisitos de precarga
1. Certificado SSL válido
2. Redirige todo HTTP a HTTPS
3. Encabezado HSTS con:
- max-age de al menos 31536000 (1 año)
- Directiva includeSubDomains
- Directiva preload
4. Todos los subdominios deben soportar HTTPS
Envío a lista de precarga
1. Verifica requisitos: Usa hstspreload.org para verificar
2. Envía dominio: Ingresa dominio en hstspreload.org
3. Espera inclusión: Toma semanas a meses para actualizaciones de navegador
Advertencias de precarga
Precarga es permanente (prácticamente). Remover de la lista toma meses y requiere actualizaciones de navegador. Solo precarga si estás seguro de que todos los subdominios soportarán HTTPS indefinidamente.Verificación de HSTS
DevTools del navegador:1. Abre DevTools → Pestaña Network
2. Carga el sitio
3. Verifica Response Headers para Strict-Transport-Security
Usando curl:curl -I https://ejemplo.com | grep -i strict
Usando DomScan:
curl "https://domscan.net/v1/health?domain=ejemplo.com"
# Reporta hasHSTS en detalles de seguridad
Estado de precarga:
Verifica hstspreload.org para ver si un dominio está precargado.
Estrategia de implementación de HSTS
Fase 1: max-age corto
Comienza con un max-age corto para probar:
Strict-Transport-Security: max-age=300
Si algo se rompe, los usuarios solo cachearon durante 5 minutos.
Fase 2: Aumenta la duración
Después de confirmar que HTTPS funciona en todos lados:
Strict-Transport-Security: max-age=86400
Fase 3: Añade subdominios
Una vez que todos los subdominios soportan HTTPS:
Strict-Transport-Security: max-age=2592000; includeSubDomains
Fase 4: Despliegue completo + precarga
Después de meses de operación estable:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Luego envía a lista de precarga.
Problemas comunes de HSTS
Subdominio sin HTTPS: includeSubDomains rompe ese subdominio Entornos de desarrollo: HSTS cacheado de producción rompe dev local Encabezados de CDN/Proxy: Asegúrate de que el encabezado HSTS no sea eliminado por intermediarios Contenido mixto: Todos los recursos deben ser HTTPS; HSTS no arregla recursos HTTP incrustadosHSTS es esencial para cualquier sitio que maneje datos sensibles y fuertemente recomendado para todos los sitios HTTPS.