SEALGRADE.COM
Hardening Web

Guía completa de cabeceras HTTP de seguridad (2026)

Publicado el 26 de septiembre de 2026 · 10 minutos de lectura · Por el equipo de Sealgrade

Las cabeceras HTTP de seguridad son una de las medidas de hardening más efectivas y menos conocidas. Se configuran en 5 minutos y protegen tu web contra ataques reales: XSS, clickjacking, sniffing de contenido, downgrade a HTTP y fugas de información entre sitios.

En esta guía te explico las 5 cabeceras imprescindibles, para qué sirve cada una, cómo implementarlas con ejemplos reales y qué errores evitar.

📑 Contenido del artículo

  1. ¿Qué son las cabeceras HTTP de seguridad?
  2. Las 5 cabeceras imprescindibles
  3. HSTS — Strict-Transport-Security
  4. CSP — Content Security Policy
  5. X-Frame-Options
  6. X-Content-Type-Options
  7. Referrer-Policy
  8. Tabla resumen
  9. Cómo implementarlas (Apache, Nginx, CDN)
  10. Errores comunes
  11. Cómo verificar

1. ¿Qué son las cabeceras HTTP de seguridad?

Cuando un navegador pide una página web, el servidor responde con dos cosas: el contenido (HTML, CSS, JS...) y un conjunto de cabeceras HTTP que le dicen al navegador cómo comportarse. Esas cabeceras son invisibles para el usuario, pero definen el comportamiento de seguridad del sitio.

Las cabeceras de seguridad son instrucciones específicas que refuerzan la protección del usuario:

💡 ¿Por qué son importantes? Las cabeceras HTTP son una defensa en profundidad: aunque tu web tenga una vulnerabilidad XSS, una CSP bien configurada puede bloquear el ataque antes de que se ejecute.

2. Las 5 cabeceras imprescindibles

Las guías OWASP Secure Headers Project y los benchmarks PCI-DSS, ISO 27001 y ENS recomiendan estas cinco como mínimo:

  1. Strict-Transport-Security (HSTS)
  2. Content-Security-Policy (CSP)
  3. X-Frame-Options
  4. X-Content-Type-Options
  5. Referrer-Policy

Vamos una por una.

3. HSTS — Strict-Transport-Security

Strict-Transport-Security
Fuerza al navegador a usar siempre HTTPS durante un periodo de tiempo.

Sin HSTS, un usuario que escribe tuweb.com en el navegador puede ser víctima de un ataque SSL stripping: el atacante intercepta la primera petición HTTP (antes de la redirección a HTTPS) y la mantiene en HTTP plano, robando cookies de sesión.

Con HSTS, el navegador recuerda que tu web solo debe cargarse por HTTPS y bloquea cualquier intento de conexión HTTP.

Ejemplo

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Parámetros:

⚠️ Cuidado con HSTS Una vez activado, el navegador no permitirá volver a HTTP durante el tiempo configurado en max-age. Si tu certificado SSL caduca y no lo renuevas, tu web quedará inaccesible para los usuarios que ya visitaron el sitio. Asegúrate de tener renovación automática de SSL antes de activar HSTS.

Recomendación: empieza con max-age=86400 (1 día), sube a 31536000 (1 año) cuando estés seguro, y luego añade preload.

4. CSP — Content Security Policy

Content-Security-Policy
Define qué recursos (scripts, estilos, imágenes) puede cargar el navegador, previniendo XSS y data injection.

CSP es la cabecera más potente y más compleja de todas. Permite crear una lista blanca de qué scripts, desde qué dominios, qué estilos y qué conexiones puede hacer el navegador. Si un atacante inyecta un script desde un dominio no autorizado, el navegador lo bloquea.

Ejemplo básico

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.tuweb.com; style-src 'self' 'unsafe-inline'

Directivas más comunes:

CSP de ejemplo (buena base)

Content-Security-Policy:
    default-src 'self';
    script-src 'self' https://cdn.tuweb.com https://www.googletagmanager.com;
    style-src 'self' 'unsafe-inline';
    img-src 'self' data: https:;
    font-src 'self' https://fonts.gstatic.com;
    connect-src 'self' https://api.tuweb.com;
    frame-ancestors 'none';
    form-action 'self';
    base-uri 'self';
    upgrade-insecure-requests
⚠️ CSP puede romper tu web Una CSP mal configurada bloqueará scripts legítimos y tu web aparecerá "rota". Siempre empieza con Content-Security-Policy-Report-Only y revisa los reportes antes de aplicar la política real.

Modo seguro para empezar:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri https://tuweb.com/csp-report

Así el navegador no bloquea nada, pero te envía un reporte con todo lo que bloquearía si estuviera activo. Tras una semana analizando reportes, quitas el -Report-Only y ya tienes una CSP segura.

5. X-Frame-Options

X-Frame-Options
Evita que tu web se cargue dentro de un iframe ajeno (clickjacking).

Clickjacking es un ataque en el que el atacante carga tu web dentro de un iframe invisible en su web, engañando al usuario para que haga clic en botones de tu web sin saberlo (por ejemplo, "Confirmar transferencia").

X-Frame-Options le dice al navegador si tu web puede o no cargarse dentro de un iframe.

Valores posibles

Ejemplo

X-Frame-Options: SAMEORIGIN

Recomendación: SAMEORIGIN para la mayoría de webs. DENY solo si tu web no se embebe nunca.

Equivalente moderno en CSP:

Content-Security-Policy: frame-ancestors 'self'

Se recomienda poner ambas para compatibilidad con navegadores antiguos.

6. X-Content-Type-Options

X-Content-Type-Options
Impide que el navegador "adivine" el tipo de un fichero cuando el servidor no lo declara.

Los navegadores antiguos intentaban "adivinar" el tipo de un fichero (MIME sniffing) cuando el servidor no declaraba un Content-Type válido. Esto permitía ataques: subir un fichero .jpg que en realidad es HTML+JavaScript ejecutable.

Con esta cabecera, el navegador deja de adivinar y respeta estrictamente el Content-Type declarado.

Ejemplo

X-Content-Type-Options: nosniff

El único valor válido es nosniff. Es la cabecera más fácil de implementar y no rompe nada. No hay excusa para no tenerla.

7. Referrer-Policy

Referrer-Policy
Controla qué información se envía al navegar desde tu web hacia otro sitio.

Cuando un usuario hace clic en un enlace de tu web, el navegador envía al sitio de destino una cabecera Referer con la URL desde la que vino. Esa URL puede contener información sensible: tokens de sesión, IDs de usuario, rutas internas...

Referrer-Policy controla cuánta información se envía.

Valores más usados

Ejemplo

Referrer-Policy: strict-origin-when-cross-origin

Recomendación: strict-origin-when-cross-origin. Es el estándar moderno que respeta la privacidad sin romper el tracking analítico que necesitan muchas webs.

8. Tabla resumen

Cabecera Protege contra Valor recomendado Riesgo de romper algo
Strict-Transport-Security SSL stripping, downgrade a HTTP max-age=31536000; includeSubDomains Medio (no volverás a HTTP fácilmente)
Content-Security-Policy XSS, inyección de scripts, data injection default-src 'self'; frame-ancestors 'none' Alto (empezar con Report-Only)
X-Frame-Options Clickjacking SAMEORIGIN Bajo
X-Content-Type-Options MIME sniffing nosniff Muy bajo
Referrer-Policy Fuga de información, tracking strict-origin-when-cross-origin Bajo

9. Cómo implementarlas

Apache

En el fichero .htaccess o en la configuración del VirtualHost:

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-Content-Type-Options "nosniff"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Content-Security-Policy "default-src 'self'; frame-ancestors 'none'"
</IfModule>

Nginx

En el bloque server de tu configuración:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'; frame-ancestors 'none'" always;

Cloudflare (sin tocar el servidor)

Cloudflare permite añadir cabeceras desde el panel: Rules → Transform Rules → Modify Response Header. Añades una regla que se aplique a tudominio.com/* e inyectas las cabeceras que quieras. Ideal si no tienes acceso al servidor.

PHP

header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
header('X-Frame-Options: SAMEORIGIN');
header('X-Content-Type-Options: nosniff');
header('Referrer-Policy: strict-origin-when-cross-origin');

Node.js / Express

La forma más sencilla es usar el paquete helmet:

const helmet = require('helmet');
app.use(helmet());

Helmet añade automáticamente 11 cabeceras de seguridad, incluyendo las 5 de esta guía.

10. Errores comunes

Error 1 · Activar HSTS antes de tener SSL renovable

Si activas HSTS con max-age=31536000 y tu certificado caduca, tu web quedará inaccesible durante un año para los usuarios que ya visitaron el sitio. Configura renovación automática (Let's Encrypt, Cloudflare SSL) antes de activar HSTS.

Error 2 · CSP demasiado estricta desde el primer día

Una CSP con default-src 'none' romperá tu web. Usa Content-Security-Policy-Report-Only durante 1-2 semanas y analiza los reportes antes de activar la política real.

Error 3 · Olvidar la cabecera always en Nginx

En Nginx, las cabeceras solo se aplican a respuestas 200 por defecto. Si tu web devuelve errores 404 o redirecciones, las cabeceras no se envían. Añade siempre always al final.

Error 4 · Confiar solo en X-Frame-Options

X-Frame-Options está obsoleta en favor de frame-ancestors de CSP. Pon las dos para máxima compatibilidad.

Error 5 · No verificar que se aplican

Muchas webs configuran las cabeceras pero solo en la home, olvidando las rutas internas, los assets o las APIs. Verifica todas las rutas.

11. Cómo verificar que las tienes

Tienes varias opciones:

  1. Con la auditoría gratuita de Sealgrade: en 30 segundos te dice si tienes las 5 cabeceras y cuáles te faltan.
  2. Con curl desde terminal:
    curl -I https://tuweb.com
    Verás todas las cabeceras HTTP que devuelve tu servidor.
  3. Con DevTools del navegador: F12 → Network → clic en la primera petición → Headers → Response Headers.
  4. Con Security Headers de Scott Helme: securityheaders.com da una nota A+ a F.
✅ Auditoría gratuita Con Sealgrade puedes comprobar en 30 segundos cuáles de las 5 cabeceras tienes activas. Gratis, sin registro.

🎯 ¿Tiene tu web las 5 cabeceras de seguridad?

Audítala gratis en 30 segundos. Te dirá exactamente qué cabeceras te faltan y cómo configurarlas.

🔍 Auditar mi web gratis →

Conclusión

Las cabeceras HTTP de seguridad son una de las mejoras más rápidas y efectivas que puedes hacer. En 5 minutos proteges tu web contra ataques reales y subes tu Health Score de forma notable.

El resumen en 5 líneas:

  1. Empieza con las 3 fáciles: X-Content-Type-Options: nosniff, X-Frame-Options: SAMEORIGIN, Referrer-Policy: strict-origin-when-cross-origin.
  2. Añade HSTS solo si tienes renovación SSL automática.
  3. CSP con Report-Only durante 1-2 semanas.
  4. Verifica con Sealgrade o curl -I.
  5. Repite para todas las rutas (home, subpáginas, APIs).
🛡️

Equipo de Sealgrade

Sealgrade es un estándar abierto y gratuito de auditoría y calificación de seguridad web. Analizamos miles de dominios para ayudar a empresas y particulares a mejorar su postura defensiva.