headers.clickjacking
Que la respuesta impida que otra web la muestre dentro de un marco (X-Frame-Options o frame-ancestors).
Por qué importa
Sin esta protección, otra web puede mostrar la tuya dentro de un marco invisible y engañar a los visitantes para que hagan clic donde no quieren (clickjacking). Un X-Frame-Options con un valor que no sea DENY ni SAMEORIGIN no protege.
Cómo se corrige
Añade la cabecera X-Frame-Options: SAMEORIGIN (o DENY) o, mejor, la directiva frame-ancestors 'self' en tu Content-Security-Policy. Si una web tuya o de un socio necesita mostrar tus páginas en un marco, indícala en frame-ancestors.
Paso a paso: el prompt para tu IA
Cuando Seotres encuentra este problema en tu web, te da un prompt listo para pegar en la IA que uses, con los datos de tu página. Este es el de esta regla con una web de ejemplo (tudominio.com):
Problema: la respuesta no protege frente al clickjacking: no hay un X-Frame-Options válido (DENY o SAMEORIGIN) ni frame-ancestors en la CSP.
Datos de tu web: Aquí van la página y la evidencia que ha encontrado Seotres.
Objetivo
Que tudominio.com no se pueda meter dentro de otra web en un marco: añade «X-Frame-Options: SAMEORIGIN» o «frame-ancestors 'self'» en la CSP.
Pasos
- Pregúntame antes si alguna web mía o de un socio necesita mostrar estas páginas dentro de un marco (iframe): si es así, esa web va en frame-ancestors.
- Si el X-Frame-Options actual tiene otro valor (por ejemplo ALLOWALL o ALLOW-FROM), los navegadores actuales lo ignoran: cámbialo por SAMEORIGIN o DENY.
- Si la web es código propio o un servidor que gestionas: añádela en la configuración del servidor (Nginx, Apache…), del CDN o del framework (por ejemplo, la configuración de cabeceras de Next.js o de tu alojamiento).
- Si usas WordPress: suele ponerse desde el alojamiento, desde un plugin de seguridad o de caché, o en el archivo .htaccess si el servidor es Apache.
- Si usas Shopify, Wix, Squarespace u otra plataforma cerrada: las cabeceras las controla la plataforma y normalmente no se pueden cambiar; si es así, dímelo en vez de buscar trucos.
Límites
- No pongas DENY sin preguntarme: impediría que la web se muestre en cualquier marco, también en los míos.
Antes de volver a Seotres
Para comprobarlo antes de volver a Seotres, mira las cabeceras de la respuesta en las herramientas para desarrolladores del navegador (pestaña Red).
Términos de esta regla
- clics
Las veces que alguien ha pulsado un resultado de Google que lleva a tu web.
Ejemplo: Tu página de zapatillas sale en Google y la pulsan 120 veces en un mes: son 120 clics.
Fuente: Ayuda de Search Console: qué son las impresiones, la posición y los clics
- clickjacking
Ataque que muestra tu web dentro de un marco invisible de otra para que los visitantes hagan clic sin querer.
Ejemplo: «Content-Security-Policy: frame-ancestors 'self'» solo deja que tu propio sitio muestre tus páginas en un marco.
- Cabeceras HTTP
Datos que el servidor envía junto a cada página, sin que se vean en ella: tipo de archivo, caché, seguridad…
Ejemplo: «Content-Encoding: gzip» indica que la página viaja comprimida.
Fuente: MDN Web Docs: cabeceras HTTP
- directiva
Cada regla de una CSP: un nombre (script-src, img-src…) y la lista de orígenes permitidos para ese tipo de recurso.
Ejemplo: «img-src 'self' https://cdn.ejemplo.com» solo deja cargar imágenes de tu dominio y de ese CDN.
Fuente oficial
https://cheatsheetseries.owasp.org/cheatsheets/Clickjacking_Defense_Cheat_Sheet.html