Comprobador de encabezados de seguridad HTTP
Qué hace cada encabezado, qué dice realmente el tuyo y la línea que se debe agregar. Sin calificación con letras.
Por dónde empezar, si estás empezando
Las cabeceras no valen todas lo mismo ni tienen todas el mismo riesgo de despliegue. En el orden que da más protección con menos probabilidad de romper algo:
| Cabecera | Impide | Riesgo de romper cosas |
|---|---|---|
Strict-Transport-Security | La degradación de HTTPS en la primera visita | Ninguno, si ya sirves solo por HTTPS |
X-Content-Type-Options | El olfateo de tipos MIME en los archivos subidos | Ninguno en la práctica |
Referrer-Policy | Filtrar URL a terceros | Bajo: puede afectar a la atribución en analítica |
X-Frame-Options / frame-ancestors | El clickjacking | Bajo, salvo que algo te incruste legítimamente |
Permissions-Policy | Que marcos incrustados pidan cámara o ubicación | Bajo |
Content-Security-Policy | Que se ejecute script inyectado | Alto. Usa primero el modo de solo informe. |
La última fila es la que más importa y la que exige trabajo de verdad. Todo lo que hay encima es una tarde.
HSTS y la única decisión irreversible que lleva dentro
Strict-Transport-Security le dice al navegador que use HTTPS para este host durante los próximos max-age segundos, pase lo que pase. Cierra un hueco estrecho pero real: quien escribe example.com hace una petición en claro antes de tu redirección, y esa petición se puede interceptar.
Strict-Transport-Security: max-age=31536000; includeSubDomainsincludeSubDomains importa más de lo que parece. Sin él, un subdominio servido por HTTP todavía puede poner cookies para el dominio padre. Con él, todos los subdominios tienen que ser solo HTTPS o se vuelven inaccesibles, así que compruébalo antes de añadirlo.
La directiva preload es la decisión que hay que pensarse a fondo. Mete tu dominio en las listas de precarga que los navegadores traen de fábrica, así que HTTPS queda impuesto antes incluso de la primera petición. Y es en la práctica irreversible: quitarlo exige una solicitud a quienes mantienen la lista y luego esperar a que salgan versiones de los navegadores, lo que son meses. Excelente cuando estás seguro; mala cosa para añadir a la ligera.
CSP: el modo de solo informe no es opcional
Una Content-Security-Policy es la única cabecera de esta lista que impide que se ejecute script inyectado, y la única que puede tumbarte el sitio. Ambas cosas salen de la misma propiedad: restringe lo que puede cargarse.
Despliégala en modo de solo informe, con un recolector, y déjala unas semanas con tráfico real. Lo que te vas a encontrar no es lo que esperabas leyendo el código: habrá un servidor de fuentes que olvidaste, un iframe de pagos y, con frecuencia, un script inyectado en el borde de la CDN que no aparece en ningún archivo fuente. Esa última categoría es justo lo que el modo de solo informe existe para sacar a la luz.
Content-Security-Policy-Report-Only: default-src 'self';
script-src 'self'; object-src 'none'; base-uri 'self';
report-uri /csp-reportDos cosas anulan casi todo el beneficio. 'unsafe-inline' en script-src permite exactamente el script en línea inyectado que la política existe para frenar; la salida son los nonces o los hashes. Y 'unsafe-eval' vuelve a habilitar eval y sus parientes, que algunas compilaciones antiguas de ciertos frameworks todavía necesitan. El comprobador marca ambos como debilitamiento y no como ausencia, porque una política con ellos sigue haciendo un trabajo útil; solo que no hace el principal.
Cabeceras cuyo consejo ha caducado
- `X-XSS-Protection`: controlaba un filtro del navegador que se ha eliminado de todos los navegadores importantes y que, en su día, se podía manipular para romper páginas. No es una cabecera que haya que poner en 2026.
- `Expect-CT`: obsoleta. La Certificate Transparency se impone hoy de forma incondicional, así que la cabecera no hace nada.
- `Feature-Policy`: renombrada a
Permissions-Policy, con otra sintaxis. Solo se respeta el nombre nuevo. - `Public-Key-Pins`: eliminada de los navegadores, y con razón. Un error ahí dejaba tu dominio inservible durante toda la vida del pin, sin forma de recuperarlo.
Qué no comprueba esto
Una página, una respuesta. Lee las cabeceras de la respuesta final tras seguir las redirecciones, y ahí se para. No rastrea el sitio, no evalúa JavaScript, no prueba tu configuración de TLS ni mira las marcas de las cookies, y rutas distintas del mismo sitio pueden enviar cabeceras completamente distintas, así que comprobar la portada te dice cosas sobre la portada.
Para la configuración de TLS en concreto, Qualys SSL Labs es la herramienta consolidada y es exhaustiva. Para el certificado en sí, esta lee lo que presenta realmente un host.
Preguntas sobre cabeceras
¿Por qué no hay puntaje ni calificación?
Porque una calificación es el único resultado sobre el que nadie puede actuar. Saber que tiene una C no le dice nada sobre qué encabezado falta, por qué es importante para su sitio o qué configurar, y lo alienta a agregar encabezados para mover una letra en lugar de resolver un problema. Un sitio con un CSP estricto y sin una política de permisos está en mucho mejor forma que uno con seis encabezados configurados con valores permisivos, y ninguna letra puede expresar eso. Entonces, esto informa cada encabezado por separado, juzga el valor que realmente envías y te da la línea para agregar.
¿Qué encabezado debo agregar primero?
Seguridad de transporte estricta, si ya utiliza solo HTTPS. Es una línea, no puede interrumpir nada que estuviera funcionando y cierra la ventana de degradación de la primera visita. Luego, Content-Security-Policy en modo de solo informe, que es el que tiene verdadera fuerza, y solo informe le permite descubrir lo que realmente carga su sitio antes de aplicar algo. X-Content-Type-Options: nosniff también es gratuito y debería estar activado.
¿Una política de seguridad de contenido dañará mi sitio?
Puede hacerlo fácilmente, razón por la cual existe el modo de solo informe. Implemente Content-Security-Policy-Report-Only con un recopilador, déjelo durante un par de semanas de tráfico real y lea lo que informa: encontrará recursos que había olvidado y, con frecuencia, elementos inyectados en el borde por un CDN o un proveedor de análisis que no aparecen en ningún archivo fuente. Sólo haga cumplir una vez que los informes estén tranquilos. Hacer cumplir una política escrita a partir de una lectura del código base es la forma en que se realiza el pago.
¿Vale la pena configurar X-XSS-Protection?
No. Controlaba un filtro XSS del navegador que se eliminó de todos los navegadores principales (Chrome lo eliminó en 2019) y en su día el filtro en sí introdujo vulnerabilidades, porque podía manipularse para romper páginas que no eran vulnerables. Establecerlo en 0 es defendible si algún escáner insiste; poniéndolo en 1; mode=block repite un consejo que expiró hace años. Content-Security-Policy es el reemplazo.
¿Aún necesito X-Frame-Options si tengo CSP?
No, siempre que su CSP establezca frame-ancestros, que lo reemplaza en todos los navegadores actuales. Este verificador reconoce eso y no informa que X-Frame-Options falta cuando frame-ancestros está haciendo el trabajo. Mantener ambos no cuesta nada y sólo ayuda con navegadores lo suficientemente antiguos como para que probablemente tengas problemas mayores.
¿La falta de un encabezado significa que soy vulnerable?
No. Los encabezados de seguridad son una defensa en profundidad: limitan el daño de una vulnerabilidad, no la crean ni la eliminan. Un sitio sin CSP no es vulnerable a XSS; un sitio con un error XSS lo es, y el CSP es lo que evita que ese error se convierta en un compromiso total. Agregar encabezados vale la pena y es económico, y no sustituye la codificación de salida, la validación de entradas y el mantenimiento de las dependencias actualizadas.
Última revisión . ¿Has visto algo desactualizado? Dínoslo.
