¿Se puede enmarcar tu sitio desde otro sitio?
El clickjacking esconde tu página real dentro de un marco invisible en otro sitio, así el visitante hace clic en tus botones sin saberlo. Pega una URL para ver si otros sitios pueden enmarcarla y si eso pone en riesgo a tus visitantes.
- X-Frame-Options
- CSP frame-ancestors
Esta es la URL cargada en un marco de nuestra página, tal como lo haría un atacante. Si ves la página, cualquier sitio puede hacer lo mismo. Si el marco muestra un error como "refused to connect", tu navegador lo bloqueó.
Esta URL usa http sin cifrar, que los navegadores no cargan dentro de una página https, así que el marco queda vacío en cualquier caso. Guíate por el veredicto de las cabeceras de arriba.
Cómo solucionarlo
Envía un Content-Security-Policy con frame-ancestors, más X-Frame-Options para navegadores antiguos. Añade ambos en el servidor web que está delante de tu sitio.
nginx
add_header Content-Security-Policy "frame-ancestors 'self'" always;
add_header X-Frame-Options "SAMEORIGIN" always;
Apache
Header always set Content-Security-Policy "frame-ancestors 'self'"
Header always set X-Frame-Options "SAMEORIGIN"
¿Usas Odoo? Usa 'self' en lugar de 'none': el editor del sitio web muestra tus propias páginas en un marco del mismo dominio. CICDoo activa estas cabeceras por defecto en cada instancia que despliega.
Cómo funciona el ataque
Tu página, los clics de otro
Un marco invisible
El atacante carga tu página real en un iframe transparente y la coloca sobre un señuelo, como un botón de premio o un reproductor de vídeo.
Un clic real
El visitante ya ha iniciado sesión en tu sitio. Su clic cae en tu página: aprueba un pago, cambia un correo o concede acceso.
Una cabecera lo detiene
frame-ancestors o X-Frame-Options le dice al navegador qué sitios pueden enmarcarte. Sin ellos, el navegador se lo permite a cualquiera.
FAQ
Tus preguntas, respondidas
¿Qué comprueba esta prueba?
Solicitamos la URL desde nuestro servidor y leemos dos cabeceras de respuesta: X-Frame-Options y la directiva frame-ancestors de Content-Security-Policy. La página también carga la URL en un marco para que veas el resultado en tu propio navegador.
¿Qué cabecera debo usar?
frame-ancestors es el estándar moderno y prevalece siempre que está presente. Mantén también X-Frame-Options para navegadores antiguos. Usa 'self' para permitir solo tu propio dominio, o 'none' para bloquear cualquier marco.
¿Por qué el marco aparece en blanco?
Algunos sitios bloquean el enmarcado, muestran una página en blanco a visitantes desconocidos o usan http sin cifrar, que los navegadores se niegan a cargar dentro de una página https. El veredicto de las cabeceras no depende de tu navegador.
¿Mi sitio es vulnerable si se puede enmarcar?
No necesariamente. El clickjacking necesita una página con una acción que importe, como un pago o un cambio de configuración, un visitante con la sesión iniciada y una cookie de sesión que el navegador envíe dentro de un marco en otro sitio. Los navegadores actuales retienen las cookies sin SameSite=None, así que una página enmarcada suele cargarse sin sesión. Aun así vale la pena añadir las cabeceras: cierran la puerta definitivamente y las auditorías de seguridad las comprueban.
¿Sigue funcionando ALLOW-FROM?
No. Los navegadores actuales ignoran X-Frame-Options ALLOW-FROM. Para permitir sitios concretos de socios, inclúyelos en frame-ancestors.
¿Guardáis la URL?
Solo guardamos un registro de la solicitud para limitar la frecuencia, no la URL ni el resultado.
Cabeceras de seguridad que nunca tendrás que recordar.
CICDoo ejecuta Odoo en servidores que son tuyos, con protección contra enmarcado, SSL, inicio de sesión en dos pasos, copias de seguridad y un análisis de seguridad diario de cada instancia.
Sin tarifas por usuario. Tus servidores siguen siendo tuyos.