script FrameBusting

5

Es comúnmente conocido que cargar su sitio dentro de un marco en otro sitio, puede exponer su sitio a todo tipo de males, y en general no es una buena idea si tiene datos confidenciales para proteger.
Por lo tanto, surgieron los scripts FrameBusting, generalmente un script simple que se ejecuta cuando el sitio se está cargando; Si está en un marco, se vuelve a cargar sin marcos.
Por lo general, algo simple en este sentido:

if (top != self) 
    top.location.replace(location);

Ahora, si se encuentra en un sitio público, como un foro o un sitio de redes sociales, donde es común publicar enlaces y mostrarlos en un marco, es posible que desee crear un marco para su sitio (si tiene) cualquier cosa sensible allí, hay usuarios que inician sesión, etc.), fuera de los marcos de las redes sociales. Pero tampoco desea interrumpir la experiencia del usuario, y hacer que piensen que el sitio al que están vinculados es sospechoso ... Por lo tanto, podría tener la tentación de mostrarles una ventana emergente para informarles qué sucede, pero eso podría asustarlos aún más ...

Entonces, ¿cuál crees que sería la mejor solución TOTAL, teniendo en cuenta la totalidad del contexto, los riesgos y las consecuencias, y evitar el "teatro de seguridad"?

  • Deja el sitio dentro de un marco
  • Framebust en silencio
  • Proporcionar una ventana emergente, solo para notificar al usuario lo que está pasando
  • Proporcionar una ventana emergente al usuario con la opción de cancelar

P.S. El sitio era el sitio ESTE , y lo descubrí al publicar el sitio en numerosos grupos relacionados con la seguridad en LinkedIn después del inicio de la versión beta pública ( ¿por qué no lo hace?;)), después de haber recibido algunas respuestas negativas ... Resulta que, SE elige la opción 3 - emergente con la opción no para cancelar. Colocó como un error para el meta ....

    
pregunta AviD 21.11.2010 - 02:26
fuente

2 respuestas

5

Buena pregunta. FrameBusting es difícil de implementar correctamente y en casi todos los casos se rompe debido a razones como la incompatibilidad de los navegadores, errores o errores de los desarrolladores.

Recientemente encontré una pregunta bastante similar aquí: enlace . ¿Dónde se dice que avise al usuario con una breve explicación de lo que está sucediendo? No puede estar en desacuerdo, la explicación más sencilla: mejor para la comprensión del usuario, simplemente tenga cuidado de no perder detalles que afectan a la privacidad de los usuarios. Con los detalles dados, el usuario debe pensar por su cuenta qué hacer para no tener miedo.

Y OWASP tiene un buen trabajo de investigación sobre este tema: enlace

    
respondido por el anonymous 21.11.2010 - 02:55
fuente
3

La solución que preferiría como usuario sería: permitir que su sitio se enmarque, pero asegúrese de que los sitios maliciosos no causen ningún daño. No continúe con la sesión del usuario desde otra pestaña si está en un marco. Considere hacer el sitio de sólo lectura en este caso. Si permite que el usuario vuelva a iniciar sesión en el marco, muestre una advertencia. Por supuesto, esto es mucho trabajo para implementar en un caso de uso raro, por lo que podría no ser práctico.

Si realmente quieres romper los marcos, te sugiero una solución discreta. Utilice el código de configuración de fotogramas normal, tal vez en conjunto con X-Frame-Options Encabezado HTTP y proporcione una nota resaltada en la página en lugar de una ventana emergente.

Una nota al margen: El modelo de seguridad HTML se basa en el hecho de que un sitio no puede hacer cosas a otros sitios. Esto nos da la misma política de origen. Muchos hacks se basan en omitir esto, inyectando código en otros sitios, etc. El secuestro de clics está relacionado, pero en lugar de usar código para realizar una función en el otro sitio, la página de ataque engaña al usuario para que haga clic en alguna parte.

Personalmente, creo que el modelo de seguridad HTML, donde los servidores confían en el navegador para mantener los scripts confinados, es conceptualmente defectuoso. Preferiría un modelo en el que el código pueda hacer casi cualquier cosa que el usuario pueda hacer, y en lugar de eso, confiaría en tokens de seguridad. Claro, un script de ataque podría enviar un formulario para eliminar una publicación, pero sin el ID de sesión y la contraseña correctos, se ignoraría. Esto permitiría aplicaciones mucho más interesantes como mashups, agregadores de contenido solo para el cliente, etc. Por supuesto, ahora es demasiado tarde para cambiar la web a ese modelo de seguridad.

Estoy escribiendo esto para motivar mi consejo: incluso sin depender de la separación impuesta por el navegador (por ejemplo, framebusting) es posible escribir sitios seguros donde el usuario autorice cada acción. No haga que su seguridad se base en no-frames, pero suponga que su sitio está enmarcado, el SOP está comprometido y el sitio de encuadre puede presionar botones (con o sin instrumentalizar al usuario).

    
respondido por el jdm 21.02.2013 - 12:08
fuente

Lea otras preguntas en las etiquetas