Blog · SEO

Cabeceras de seguridad: qué hace cada una y cómo configurarlas

Un puñado de cabeceras de respuesta HTTP protege a tus visitantes del cross-site scripting, el clickjacking y los ataques de degradación. Qué hace cada una, valores seguros para empezar, cómo prueba tu sitio nuestro verificador gratuito de cabeceras de seguridad y cómo corregir cada problema que detecta, en nginx, Apache y Cloudflare.

Searvia · 24/10/2026 · Lectura de 14 min

Un técnico de TI cerrando con llave la puerta de cristal de un rack de red en una pequeña sala de servidores

En resumen: las cabeceras de seguridad son instrucciones que tu servidor envía con cada página y que le dicen al navegador que use siempre HTTPS, que ejecute scripts solo desde las fuentes que apruebes, que no permita que otros sitios incrusten tus páginas en un marco, que nunca adivine el tipo de archivo y que no exponga URL completas en la cabecera Referer. Empieza por HTTPS en todo el sitio y un certificado válido; después añade Strict-Transport-Security, X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin y frame-ancestors o X-Frame-Options. Implanta Content-Security-Policy primero en modo solo informe (report-only). Todas se configuran en el servidor o en el CDN.

Las cabeceras de seguridad son un seguro barato. La mayoría requiere una sola línea de configuración del servidor, no cuesta nada en rendimiento y cierra categorías enteras de ataques: un script inyectado que roba sesiones, un marco invisible que engaña para que se haga clic, una red de cafetería que degrada al visitante a HTTP sin cifrar. Además, son de lo primero que revisan los escáneres de seguridad, los clientes corporativos y los cuestionarios de seguridad.

Esta guía explica cada cabecera y los fundamentos de conexión que las rodean, ofrece valores iniciales seguros, muestra cómo nuestro verificador de cabeceras de seguridad gratuito prueba tu sitio y repasa la solución a cada problema que informa.

Lo básico primero: HTTPS, certificado y contenido mixto

Las cabeceras funcionan sobre una conexión cifrada; sin ella, no sirven de nada. Hay tres puntos básicos que van primero:

Las cabeceras, una por una

CabeceraProtege contraValor inicial seguro
Strict-Transport-SecurityDegradación a HTTP, robo de cookies en redes abiertasmax-age=31536000; includeSubDomains (tras probar)
Content-Security-PolicyCross-site scripting (XSS), contenido inyectado, clickjacking mediante frame-ancestorsEmpieza con Content-Security-Policy-Report-Only
X-Frame-Options o CSP frame-ancestorsClickjackingSAMEORIGIN o frame-ancestors 'self'
X-Content-Type-OptionsMIME sniffing: archivos que se ejecutan como scripts o estilosnosniff
Referrer-PolicyFiltración de URL completas a otros sitiosstrict-origin-when-cross-origin
Permissions-PolicyScripts incrustados que usan cámara, micrófono o ubicacióncamera=(), microphone=(), geolocation=()

Strict-Transport-Security (HSTS)

HSTS le indica al navegador que use HTTPS para tu host durante un número determinado de segundos, incluso cuando alguien escribe http:// o hace clic en un enlace antiguo. MDN señala tres cosas que conviene saber:

La lista de precarga de HSTS incrusta tu dominio directamente en los navegadores. Exige un certificado válido, una redirección de HTTP a HTTPS en el mismo host, todos los subdominios en HTTPS y una cabecera con max-age de al menos 31536000, includeSubDomains y preload. También advierte de que «inclusion in the preload list cannot easily be undone» (la inclusión en la lista de precarga no se puede deshacer fácilmente): la retirada tarda meses en llegar a los usuarios. Activa la precarga solo cuando estés seguro.

Content-Security-Policy (CSP)

CSP es la más potente de las cabeceras y la más difícil de implantar. Enumera desde dónde pueden cargarse scripts, estilos, imágenes y otros recursos, y el navegador rechaza todo lo demás. MDN la describe principalmente como «a defense against cross-site scripting (XSS) attacks» (una defensa contra los ataques de cross-site scripting).

La forma moderna recomendada es una CSP estricta basada en nonces o hashes en lugar de largas listas de dominios permitidos:

Content-Security-Policy: script-src 'nonce-{RANDOM}'; object-src 'none'; base-uri 'none'

El nonce debe ser aleatorio y distinto en cada respuesta. MDN advierte de que 'unsafe-inline' «defeats much of the purpose of having a CSP» (anula gran parte del propósito de tener una CSP).

Como una política estricta puede romper etiquetas de analítica, widgets de chat y scripts en línea, impleméntala en dos pasos: envía Content-Security-Policy-Report-Only con un endpoint de informes, corrige lo que muestren los informes y después cambia a la cabecera que aplica la política. En CSP también vive upgrade-insecure-requests (una red de seguridad para el contenido mixto, no un sustituto de HSTS) y es donde frame-ancestors controla la inserción en marcos.

X-Frame-Options y frame-ancestors

El clickjacking carga tu página en un marco invisible dentro de otro sitio y engaña a la gente para que haga clic en tus botones. Hay dos maneras de impedirlo:

Ninguna funciona desde una etiqueta <meta>. MDN indica que X-Frame-Options en un elemento meta «has no effect» (no tiene efecto) y que frame-ancestors «is not supported in the <meta> element» (no es compatible con el elemento <meta>). Ten en cuenta también que frame-ancestors no recurre a default-src: una política default-src 'none' sigue permitiendo que cualquiera incruste la página en un marco.

X-Content-Type-Options

nosniff indica a los navegadores que confíen en tu cabecera Content-Type. Con ella, una respuesta solicitada como script u hoja de estilos se bloquea si su tipo MIME no coincide, lo que impide que un archivo subido y disfrazado de imagen se ejecute como script. Solo tiene un valor válido:

X-Content-Type-Options: nosniff

Antes de añadirla, asegúrate de que tu servidor envía los tipos de contenido correctos, sobre todo para JavaScript y CSS.

Referrer-Policy

Cuando un visitante hace clic en un enlace a otro sitio, el navegador envía una cabecera Referer. Los navegadores modernos ya usan por defecto strict-origin-when-cross-origin, que entre sitios distintos envía solo el origen (https://example.com/) y no envía nada al pasar de HTTPS a HTTP (MDN). OWASP sigue recomendando establecerla de forma explícita «rather than relying on browser defaults» (en lugar de depender de los valores por defecto del navegador). Evita unsafe-url, que envía URL completas, incluidos los tokens que contengan, a todas partes.

Permissions-Policy y las cabeceras que conviene eliminar

Permissions-Policy desactiva funciones del navegador que no usas, de modo que un script incrustado no pueda pedir la cámara o la ubicación. MDN la marca como experimental y con compatibilidad limitada en los navegadores, así que trátala como una capa adicional. Nuestro verificador gratuito no la comprueba; el análisis de seguridad completo sí.

Hay dos cabeceras que conviene quitar en lugar de añadir: OWASP dice que no se establezca X-XSS-Protection (o que se ponga a 0), porque los antiguos filtros que controlaba podían crear vulnerabilidades, y califica Expect-CT de obsoleta. También recomienda eliminar X-Powered-By y dar a Server un valor que no revele información.

Cómo funciona el verificador de cabeceras de seguridad de Searvia

El verificador de cabeceras de seguridad gratuito usa el mismo motor que nuestro verificador SEO de sitios web y pone cinco comprobaciones en primer lugar. Hace peticiones ordinarias, como las que podría hacer cualquier visitante; no se ataca ni se sondea nada.

ComprobaciónCómo la pruebaCorrectoAvisoErrorPrioridad
HTTPSCarga la página por HTTPS y luego solicita http:// sin seguir redireccionesHTTPS funciona y HTTP redirige a una dirección https:// (si HTTP no responde en absoluto, se muestra una nota)HTTPS no funciona, o HTTP no redirigeAlta
Certificado TLSLee el certificado del host finalVálido, coincide con el host, quedan 14+ díasQuedan menos de 14 díasCaducado o no cubre el hostAlta
HSTSLee max-age de la respuesta de la página15.552.000 segundos (unos 6 meses) o másAusente o más cortoBaja
Contenido mixtoBusca URL http:// en scripts, iframes, hojas de estilo, imágenes, vídeo, audio y fuentes de una página HTTPSNingunaSolo imágenes o mediosScripts, iframes u hojas de estiloMedia
Cabeceras de seguridadBusca tres cabeceras de respuesta clave y muestra Referrer-PolicyLas tres presentesFalta algunaBaja

Las tres que cuenta son Content-Security-Policy, X-Frame-Options (o una cabecera CSP que contenga frame-ancestors) y X-Content-Type-Options. Referrer-Policy también aparece en la lista, pero su ausencia no se cuenta en tu contra: los navegadores ya usan por defecto strict-origin-when-cross-origin, y la tabla lo indica. La tabla de resultados muestra el valor de cada una, acortando las políticas largas.

Algunos límites que conviene tener presentes:

Cómo leer los resultados

Trabaja de arriba abajo por prioridad. Un fallo en HTTPS o en el certificado es urgente: los visitantes ven advertencias del navegador o navegan sin cifrado. El contenido mixto activo (scripts, iframes, hojas de estilo) es lo siguiente, porque los navegadores bloquean esos archivos y la página puede romperse. HSTS y las cabeceras de seguridad tienen prioridad baja en la puntuación, pero también son lo más rápido de corregir, así que agrúpalas en un solo cambio de configuración.

Cómo corregir cada problema que informa el verificador

«The site does not work over HTTPS.» / «HTTP does not redirect to HTTPS.»

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

En Cloudflare, activa «Always Use HTTPS» en SSL/TLS › Edge Certificates.

«The certificate expired N days ago.» / «The certificate does not cover this domain.»

Un aviso con menos de 14 días restantes suele significar que la renovación automática no funciona; investiga en lugar de renovar a mano cada vez.

«HSTS is not set.» / «HSTS is on but shorter than 6 months.»

Implántalo por fases para que un subdominio olvidado que solo funciona con HTTP no quede bloqueado:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

«N files load over plain HTTP.»

«N key security headers are missing.»

Añade las que falten en un solo cambio. Para nginx:

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-Report-Only "default-src 'self'; frame-ancestors 'self'; report-to csp" always;

Para Apache:

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"

En Cloudflare, añade cabeceras de respuesta con una Transform Rule. En Netlify, usa un archivo _headers; en Vercel, el ajuste headers de vercel.json. En nginx, recuerda que add_header dentro de un bloque location sustituye a las cabeceras definidas a nivel de servidor, así que repítelas o usa un archivo de inclusión.

En cuanto a CSP, la línea report-only de arriba es un punto de partida, no una política terminada. Apunta report-to a un endpoint de informes que controles, revisa las infracciones durante una o dos semanas, ajusta la política y luego renombra la cabecera a Content-Security-Policy. Una vez aplicada, la comprobación de CSP pasa.

Cómo comprobar las cabeceras por tu cuenta

El verificador muestra lo que envía la página comprobada, pero otras páginas, archivos y respuestas de error pueden diferir. Dos formas rápidas de verlo:

Una sorpresa frecuente son las cabeceras que aparecen en las páginas normales pero no en los errores ni en las redirecciones. En nginx, add_header solo se aplica a las respuestas correctas y a las redirecciones a menos que añadas el parámetro always, por eso todos los ejemplos anteriores lo incluyen. Otra es un CDN o un hosting que añade o elimina cabeceras, así que comprueba la respuesta que ve el público, no solo el archivo de configuración de tu servidor.

Recuerda que cada cabecera protege algo distinto. Una CSP perfecta no sirve de nada ante un certificado caducado, y HSTS no hace nada contra un script inyectado. El objetivo es el conjunto completo, añadido en un orden sensato.

Ejemplo práctico (hipotético)

El siguiente es un ejemplo hipotético, no datos reales. Halden Legal, un bufete inventado, recibe de un cliente corporativo un cuestionario de seguridad que pregunta por las cabeceras de su sitio web. El verificador de cabeceras de seguridad informa:

Las correcciones llevan una tarde. Las dos URL de imágenes se cambian a HTTPS. Tras confirmar que el subdominio del portal de clientes funciona por HTTPS, HSTS pasa a max-age=31536000; includeSubDomains en dos pasos a lo largo de una semana. En el servidor se añaden X-Frame-Options: SAMEORIGIN y Referrer-Policy: strict-origin-when-cross-origin. Una CSP en modo report-only funciona durante diez días y revela un script en línea del widget de reservas, que se mueve a un archivo y se permite por su origen antes de aplicar la política. La ejecución final pasa todas las comprobaciones y el bufete responde al cuestionario con un enlace al informe compartido.

Una lista de comprobación de una hora

Cómo vigila Searvia la seguridad de tu sitio

El verificador de cabeceras de seguridad gratuito analiza tu página de inicio, o cualquier página que introduzcas, en unos 20 segundos, sin registro, y el mismo informe incluye 33 comprobaciones más sobre apariencia en buscadores, rastreo, velocidad, móvil y autenticación del correo.

Una cuenta gratuita de Searvia añade un análisis de seguridad semanal: comprobaciones pasivas de cifrado, protecciones del navegador, flags de las cookies, versiones de software y protección contra suplantación de correo, con la petición y la respuesta que prueban cada hallazgo. Califica tu CSP (por ejemplo, 'unsafe-inline' sin nonces ni hashes), comprueba Permissions-Policy y, después de que verifiques la propiedad, busca además archivos .env y .git expuestos, copias de seguridad públicas, páginas de depuración y CORS inseguro. Write the remediation plan with AI convierte los hallazgos en configuración que puedes pegar (5 créditos). En los planes de pago desde Starter, la monitorización de disponibilidad también revisa tu certificado TLS a diario y te avisa antes de que caduque.

Preguntas frecuentes

¿Qué son las cabeceras de seguridad?
Las cabeceras de seguridad son cabeceras de respuesta HTTP que le indican al navegador cómo tratar tu página de forma más segura: usar siempre HTTPS (Strict-Transport-Security), ejecutar scripts solo desde fuentes aprobadas (Content-Security-Policy), no permitir que otros sitios la incrusten en marcos (X-Frame-Options o frame-ancestors), no adivinar los tipos de archivo (X-Content-Type-Options) y limitar lo que se envía en la cabecera Referer (Referrer-Policy). Se configuran en el servidor o en el CDN, no en el contenido de tu página.
¿Afectan las cabeceras de seguridad al SEO?
No como factores de posicionamiento individuales. La guía de experiencia de página de Google pregunta si las páginas se sirven de forma segura, así que HTTPS importa, y un HTTPS roto o el contenido mixto perjudican a los visitantes y a la confianza. Cabeceras como Content-Security-Policy y X-Frame-Options protegen a los usuarios de ataques; su valor es la seguridad, no el posicionamiento.
¿Qué max-age de HSTS es adecuado?
Un año (max-age=31536000) es una opción habitual y el mínimo para la lista de precarga de HSTS, que además exige includeSubDomains y preload. Empieza con valores más bajos, por ejemplo unos minutos, después una semana y luego un mes, mientras confirmas que todos los subdominios funcionan por HTTPS, porque los navegadores rechazarán HTTP sin cifrar durante todo el periodo. Nuestro verificador da por correctos valores de unos seis meses o más.
¿Debo usar X-Frame-Options o frame-ancestors?
Ambas valen; frame-ancestors en Content-Security-Policy es la opción moderna y más flexible, y X-Frame-Options es el respaldo más antiguo. Usa frame-ancestors 'self' o X-Frame-Options: SAMEORIGIN si nunca necesitas que tus páginas se incrusten en otros sitios. Ninguna funciona en una etiqueta meta; deben enviarse como cabeceras HTTP.
¿Sigue siendo necesaria X-XSS-Protection?
No. OWASP recomienda no establecerla o desactivarla explícitamente con X-XSS-Protection: 0, porque los antiguos filtros XSS de los navegadores que controlaba podían introducir vulnerabilidades. En su lugar, usa una Content-Security-Policy que bloquee los scripts en línea.

Fuentes

  1. HTTP Security Response Headers Cheat Sheet – OWASP
  2. Strict-Transport-Security – MDN Web Docs
  3. HSTS Preload List Submission – hstspreload.org
  4. Content Security Policy (CSP) – MDN Web Docs
  5. CSP: frame-ancestors – MDN Web Docs
  6. X-Frame-Options – MDN Web Docs
  7. X-Content-Type-Options – MDN Web Docs
  8. Referrer-Policy – MDN Web Docs
  9. Permissions-Policy – MDN Web Docs
  10. Mixed content – MDN Web Docs
  11. Understanding page experience in Google Search results – Google Search Central
  12. Module ngx_http_headers_module – nginx documentation
  13. A secure web is here to stay – Chromium Blog

Sigue leyendo