Skip to main contentSkip to footer

Comprobación de cabeceras de seguridad

Comprueba los Security Headers HTTP de cualquier página: CSP, HSTS, framing, cookies, la redirección desde HTTP, la integridad de los scripts y CORS. Cada fallo viene con el cambio exacto y cada resultado con un enlace para compartir. Gratis, sin cuenta.

Lee los encabezados de respuesta HTTP de una página y explica qué función tiene cada Security Header, cuáles faltan y cuáles están configurados de forma demasiado laxa como para resultar útiles. También comprueba los indicadores de las cookies, la redirección desde http://, los hash de integridad en los scripts de terceros, CORS y el certificado TLS. Introduce una URL completa para comprobar una página concreta.

¿Qué son los Security Headers HTTP?

Los Security Headers HTTP son instrucciones que un servidor web envía con cada respuesta. Activan protecciones que el navegador ya tiene: desde qué orígenes se pueden ejecutar scripts, si el sitio puede volver a cargarse por HTTP sin cifrar y si otro sitio puede mostrarlo dentro de un marco. Sin ellos, el navegador vuelve a unos valores por defecto permisivos.

La comprobación de Security Headers de reportedIP solicita una página igual que un navegador y lee esas cabeceras junto con las cookies, la redirección desde http:// y las etiquetas script de la página. Pone una nota de A+ a F, y cada hallazgo indica el cambio que lo corrige.

Qué revisa la comprobación

Trece comprobaciones, ordenadas por lo que evitan. El peso es la parte de cada comprobación en la puntuación; las de peso 0 se muestran, pero no puntúan.

Comprobación Qué evita Peso
Content-Security-Policy Scripts inyectados que se ejecutan con los permisos de la página (cross-site scripting) 25
Strict-Transport-Security (HSTS) La primera petición de una visita sale sin cifrar y puede desviarse 20
X-Frame-Options / frame-ancestors Clickjacking: otro sitio carga la página en un marco invisible 15
X-Content-Type-Options El navegador adivina el tipo de archivo y ejecuta una subida como script 15
HTTP → HTTPS redirect Quien escribe solo el dominio se queda en HTTP sin cifrar 10
Cookies (Secure, HttpOnly, SameSite) Cookies de sesión enviadas por HTTP o leídas por un script inyectado 10
Subresource Integrity (SRI) Un CDN comprometido cambia los scripts que carga tu página 10
Referrer-Policy URL completas, con sus parámetros, llegan a otros sitios 10
Permissions-Policy Código incrustado pide cámara, micrófono o ubicación 10
CORS (Access-Control-Allow-Origin) Otros sitios leen la página con la sesión del visitante 5
Server / X-Powered-By Números de versión exactos ponen el sitio en la lista de un escáner 5
COOP / COEP / CORP Se muestra, no puntúa: solo hace falta para el aislamiento cross-origin 0
TLS certificate Se muestra, no puntúa: emisor, caducidad y protocolo del certificado 0

Más contexto sobre cada cabecera: la OWASP HTTP Headers Cheat Sheet y la referencia de cabeceras de MDN.

Cómo se calculan la puntuación y la nota

Cada comprobación obtiene entre 0 y 100 puntos, multiplicados por su peso. Por eso una Content-Security-Policy ausente cuesta cinco veces más que un servidor que muestra su versión, y eso se corresponde con el daño que permite cada una. Una comprobación que no aplica sale del cálculo en lugar de valer cero: HSTS en una página servida por HTTP, los atributos de las cookies en una página sin cookies, la redirección cuando nada escucha en el puerto 80.

La nota usa los límites de letras del HTTP Observatory de Mozilla: A desde 90 puntos, A- desde 85, B+ desde 80, B desde 70, B- desde 65, C+ desde 60, C desde 50, C- desde 45, D+ desde 40, D desde 30, D- desde 25 y F por debajo. A+ exige al menos 95 puntos y ningún hallazgo roto. El Observatory llega a A+ con puntos extra por encima de 100 y pondera algunos hallazgos de otra manera, así que las dos notas pueden diferir para el mismo sitio.

Dónde se equivoca una simple checklist

frame-ancestors sustituye a X-Frame-Options

Cuando la Content-Security-Policy define frame-ancestors, X-Frame-Options ya no hace falta. La directiva es su sucesora oficial, todos los navegadores actuales la respetan y puede nombrar los sitios autorizados a incrustar la página. Hay dos casos que no cuentan: una política enviada solo como Report-Only, que no bloquea nada, y frame-ancestors dentro de una etiqueta meta, que los navegadores ignoran.

max-age=0 es peor que no tener HSTS

Este valor le dice al navegador que olvide que el sitio solo funcionaba por HTTPS (RFC 6797, sección 6.1.1). Una checklist ve una cabecera presente y la marca como correcta; esta comprobación la marca como rota.

HSTS por HTTP sin cifrar no sirve de nada

Los navegadores deben ignorar la cabecera en una respuesta sin cifrar (RFC 6797, sección 8.1). Por eso la comprobación la deja fuera del cálculo en lugar de sumar o restar puntos.

Una cabecera enviada dos veces no siempre es un error

A menudo el servidor web y el CMS añaden la misma cabecera. Las copias idénticas se leen como un solo valor, así que la comprobación las acepta y solo avisa del duplicado. En HSTS solo cuenta la primera copia (RFC 6797, sección 8.1): si la segunda lleva includeSubDomains y la primera no, se aplica la más débil. X-Frame-Options con DENY y SAMEORIGIN a la vez hace que los navegadores rechacen cualquier marco, incluidos los del propio sitio.

Cómo funciona la herramienta y sus límites

La dirección se solicita con un GET normal, no con HEAD, porque bastantes servidores, proxies y cortafuegos responden a HEAD con menos cabeceras. Se siguen hasta tres redirecciones. La petición lleva una cabecera Origin de un dominio que nadie autorizaría, así que una página que la acepta de todos modos está copiando cualquier origen que se lo pida. Una segunda petición va a http:// en el mismo host para ver adónde lleva su primera redirección, y un handshake TLS en el puerto 443 lee el certificado.

De la página solo se leen los primeros 256 KB de HTML, para las etiquetas script y una Content-Security-Policy en una etiqueta meta. No se guarda nada del contenido. Las cookies se reducen a su nombre y sus atributos antes de guardar o mostrar nada; sus valores se descartan.

Los resultados se guardan una hora. Cada comprobación recibe un enlace del tipo /security-headers/?url=example.com que muestra el resultado guardado sin volver a consultar el sitio, y un resultado guardado no cuenta para el límite diario. Volver a comprobar trae un resultado nuevo en cuanto el guardado tiene un minuto.

La comprobación se ejecuta desde nuestro servidor, así que un sitio que cambia sus cabeceras según el país, el user agent o el estado de sesión puede responderte de otra forma. Solo se lee una página: las cabeceras del servidor web suelen aplicarse en todas partes, pero una aplicación puede añadirlas o quitarlas por ruta, así que conviene comprobar aparte la página de acceso o de pago. Las etiquetas script que JavaScript inserta más tarde no se ven. La herramienta no puede saber si una política es lo bastante amplia para que el sitio funcione, y en TLS indica la versión que eligió el servidor, no si todavía acepta versiones más antiguas.