Falta el Header X-Frame-Options
El header X-Frame-Options está ausente, permitiendo a atacantes embeber tu app en un iframe invisible y engañar usuarios para que hagan clic en tus elementos de UI (clickjacking).
Cómo Funciona
En un ataque de clickjacking, el atacante pone tu sitio en un iframe transparente sobre una página falsa. El usuario cree que está haciendo clic en un botón de la página falsa, pero en realidad está hackeando un botón de tu sitio — como 'Transferir fondos' o 'Activar cámara'. X-Frame-Options: DENY le dice al navegador que rechace el embebido en iframe.
// MAL: sin protección contra framing
// Cualquier sitio puede hacer: <iframe src="https://tuapp.com/settings"></iframe>// BIEN: niega el framing en la config de Next.js
export default {
async headers() {
return [{
source: '/(.*)',
headers: [
{ key: 'X-Frame-Options', value: 'DENY' },
// Alternativa moderna: CSP frame-ancestors
{ key: 'Content-Security-Policy', value: "frame-ancestors 'none'" }
]
}];
}
};Ejemplo Real
En 2009, el diálogo de permisos de Adobe Flash fue clickjackeado — los usuarios fueron engañados para activar su cámara y micrófono sin saberlo. La misma técnica aplica a cualquier UI web con botones sensibles.
Cómo Prevenirlo
- Configura X-Frame-Options: DENY (o SAMEORIGIN si necesitas framing del mismo sitio)
- También agrega frame-ancestors 'none' en tu header CSP como complemento moderno
- Aplícalo a todas las páginas, no solo al login — las páginas de configuración son objetivos de alto valor
- Verifica con curl -I tudominio.com y revisa los headers de respuesta
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Falta el Header Content-Security-Policy
mediumEl header Content-Security-Policy (CSP) está ausente, dejando a los navegadores sin instrucciones sobre qué fuentes de scripts, estilos y recursos confiar.
Falta el Header X-Content-Type-Options
lowEl header X-Content-Type-Options: nosniff está ausente, permitiendo que los navegadores adivinen el tipo de contenido de una respuesta y potencialmente ejecuten contenido como script.
Falta HTTP Strict Transport Security (HSTS)
mediumEl header Strict-Transport-Security está ausente, permitiendo a los navegadores conectarse por HTTP plano y habilitando ataques de downgrade donde un atacante intercepta tráfico no cifrado.
Cookies Sin Flag Secure
mediumCookies de sesión configuradas sin el flag Secure, permitiendo que se transmitan por conexiones HTTP no cifradas y sean interceptadas por atacantes en la red.