Saltar al contenido
SeguridadImportancia: Importante

Cabeceras de seguridad HTTP: cuáles poner y cómo

Las cabeceras HTTP son instrucciones que tu servidor envía al navegador junto con cada página, sin que el visitante las vea. Algunas activan protecciones del navegador que, si no las pides, quedan desactivadas o en un modo más permisivo.

3 min de lecturaActualizada el

Por qué importa

Cada una cierra una puerta concreta. X-Frame-Options impide que otra web cargue la tuya dentro de un marco invisible para que tus visitantes hagan clic donde no quieren (el llamado clickjacking). X-Content-Type-Options: nosniff evita que el navegador trate un fichero como algo distinto de lo que dice ser, por ejemplo un supuesto texto que en realidad contiene un script.

Referrer-Policy controla cuánto de la dirección de tu página se comunica a otras webs cuando alguien pulsa un enlace, importante si tus URL llevan datos como números de pedido o búsquedas. Permissions-Policy desactiva funciones del navegador que no usas (cámara, micrófono, ubicación), para que ningún script de terceros pueda pedirlas. Son cambios sencillos y, bien configurados, invisibles para el visitante.

Cómo lo comprueba Posiciona

Revisamos si la respuesta de tu página incluye cuatro cabeceras: X-Content-Type-Options, X-Frame-Options (o la directiva frame-ancestors en la CSP, que hace lo mismo), Referrer-Policy y Permissions-Policy. Cada una pesa según lo que protege (3 las dos primeras, 2 Referrer-Policy y 1 Permissions-Policy) y la nota va de 30, sin ninguna, a 100, con las cuatro: son capas de refuerzo, así que su ausencia es un aviso, no un fallo crítico. Comprobamos que estén, no su valor, así que revisa que usas los recomendados.

En la nota de Seguridad esta comprobación cuenta como “importante” (peso 3 de 5).

Cómo solucionarlo

  1. Mira qué cabeceras envía ya tu web: abre las herramientas de desarrollo (F12), pestaña Red, recarga, pulsa en la primera petición y revisa las cabeceras de respuesta.

  2. Añade X-Content-Type-Options: nosniff. No tiene efectos secundarios si tu servidor declara bien el tipo de cada fichero.

  3. Añade X-Frame-Options: SAMEORIGIN, que solo deja que tu propia web se muestre dentro de un marco (usa DENY si nunca lo necesitas). Si la web de un socio debe mostrar la tuya en un iframe, usa en su lugar la directiva frame-ancestors de la CSP.

  4. Añade Referrer-Policy: strict-origin-when-cross-origin: las demás webs solo verán tu dominio, no la página exacta. Es el comportamiento por defecto de la mayoría de navegadores actuales, pero declararlo lo asegura.

  5. Añade Permissions-Policy desactivando solo lo que no uses, por ejemplo camera=(), microphone=(), geolocation=(). Si tu web usa la ubicación, como un buscador de tiendas, no la bloquees.

  6. En Nginx, si declaras alguna cabecera con add_header dentro de un bloque location, ese bloque deja de heredar las del bloque server: repítelas allí o decláralas todas en el mismo nivel.

  7. Después, recorre la web (formularios, pago, vídeos incrustados, chat) para comprobar que todo funciona, y vuelve a analizarla.

Nginx (bloque server)Nginx
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Apache (.htaccess)Apache
<IfModule mod_headers.c>
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

En WordPress

  • El plugin Headers Security Advanced & HSTS WP añade estas cabeceras desde el escritorio, sin tocar el servidor.
  • Si prefieres el servidor y tu hosting usa Apache, copia el ejemplo de abajo en el .htaccess, fuera del bloque que gestiona WordPress. Usa SAMEORIGIN y no DENY: el personalizador de WordPress muestra la web dentro de un marco.

En Shopify

  • En Shopify, las cabeceras HTTP las gestiona la plataforma y no se pueden añadir ni cambiar desde el tema. Shopify ya envía varias por defecto.
  • Si nuestro informe indica que falta alguna, no es algo que puedas corregir tú: puedes consultarlo con el soporte de Shopify y centrarte en lo que sí controlas, como las apps y los scripts que cargas.

Preguntas frecuentes

¿Y la cabecera X-XSS-Protection?

Está obsoleta. Activaba un filtro contra ataques XSS que los navegadores actuales ya han eliminado, y en algunos casos ese filtro llegaba a crear problemas nuevos. No la necesitas: la protección moderna contra XSS es la Content Security Policy. Si tu servidor la envía, lo recomendable es quitarla o ponerla a 0.

¿Pueden estas cabeceras romper mi web?

Las cuatro que comprobamos rara vez dan problemas. Los casos típicos son X-Frame-Options cuando otra web tuya o de un socio muestra tu página en un iframe, Permissions-Policy si bloqueas una función que sí usas, y nosniff si el servidor declara mal el tipo de algún fichero. Añádelas de una en una, prueba formularios, pagos y contenidos incrustados, y ajusta si algo falla.

Guías relacionadas

Descubre qué más frena tu web

Nota de 0 a 100 y los problemas ordenados por importancia, con la solución de cada uno. Gratis y en menos de un minuto.