2011-12-05 26 views
8

Tengo una página con un iframe. La página y la fuente del iframe están en diferentes dominios. Dentro del iframe estoy usando un editor de texto enriquecido llamado CuteEditor (que no es tan lindo). Hay ciertas funciones de Javascript en CuteEditor que intentan acceder al 'documento' pero el navegador niega el acceso porque no están en el mismo dominio.¿Cómo puedo evitar que un iframe acceda al marco principal?

Aquí está el error exacto:

Permission denied to access property 'document' http://dd.byu.edu/plugins/cuteeditor_files/Scripts/Dialog/DialogHead.js Line 1

Edición del Javascript está fuera de la cuestión porque se ha minfied y ofuscado por lo que todos los nombres de las variables son crípticos.

El uso de un editor diferente está actualmente fuera de la cuestión debido a que este es un proyecto de trabajo y este es el editor que me dijeron que usara.

¿Hay alguna manera de mantener el iframe autónomo? Entonces, ¿hace todo dentro del iframe y no intenta salir al marco principal?

Respuesta

-2

No debería preocuparse de que eso ocurra.

La única forma en que los iframes pueden hablar origen cruzado es con postMessage, y eso solo es posible si estás escuchando ese dominio directamente.

https://developer.mozilla.org/en/DOM/window.postMessage

+0

Sin embargo, CuteEditor no funciona dentro del iframe debido a este error. ¿Es un problema diferente, entonces? – Justin

+0

No estoy seguro. Necesitaríamos ver su código fuente. –

7

Si el iframe niño se carga desde un dominio diferente, entonces no será capaz de acceder a la página padre o DOM.

Sin embargo, todavía hay una posible vulnerabilidad al ataque de hombre en el medio de la siguiente manera. Supongamos que su página se carga fuera http://yoursite.com y el iframe va a http://badsite.org

  • primera http://badsite.org redirige a http://yoursite.com/badpage

  • Este es el paso que requiere un ataque man-in-the-middle. El atacante debe poder obtener entre el usuario y yoursite.com, o controlar las respuestas a su búsqueda de DNS. Esto es más fácil de lo que parece: cualquier persona que tenga control administrativo sobre un punto de acceso WiFi público podría hacerlo (piense en Starbucks, hoteles, aeropuertos). El objetivo es servir el contenido de http://yoursite.com/badpage desde el sitio del atacante, no desde su sitio real.

  • El atacante puede servir el código malicioso que quiera del (falso) http://yoursite.org/badpage. Como está en el mismo dominio que la página principal, tendrá acceso al DOM principal.

El atributo de sandbox iframe HTML5 parece ser la forma de evitar esto. Puede leer el spec, pero la mejor descripción podría ser here.

Esto parece ser compatible con Chrome, IE10, FireFox, Safari.

La especificación dice que si el atributo "Permitir el mismo origen" es no establecido, "el contenido se trata como si fuera de un origen único". Esto debería evitar que su iframe hijo acceda a cualquier parte del DOM de los padres, sin importar lo que el navegador crea que es la URL.

+0

El ataque no es tan fácil como se dijo. Cuando el dispositivo obtiene dirección a yoursite.com desde DNS, guardará en caché para obtener más accesos. Para implementar completamente este ataque, se requiere un proxy HTTP, y man-in-the-middle tendrá que reescribir la página web para usar http://yoursite.com/badpage como iframe src. Esto es más complicado si usa HTTPS, ya que el proxy debería imitar HTTPS como HTTP para cambiar de página. No es imposible, pero a menos que el sitio sea atractivo para los atacantes (como bancos, subastas o sitios de acceso enorme que pueden utilizarse para recolectar contraseñas), su exposición es baja. – fernacolo

Cuestiones relacionadas