Как я могу предотвратить доступ iframe к родительскому фрейму? - PullRequest
9 голосов
/ 05 декабря 2011

У меня есть страница с iframe. Страница и источник iframe находятся в разных доменах. Внутри iframe я использую текстовый редактор CuteEditor (который оказался не таким милым). В CuteEditor есть определенные функции javascript, которые пытаются получить доступ к «документу», но браузер запрещает доступ, поскольку они не находятся в одном домене.

Вот точная ошибка:

Отказано в доступе к свойству 'документ' http://dd.byu.edu/plugins/cuteeditor_files/Scripts/Dialog/DialogHead.js Линия 1

Редактирование javascript не может быть и речи, потому что оно было минимизировано и запутано, поэтому все имена переменных являются загадочными.

Использование другого редактора в настоящее время исключено, потому что это рабочий проект и это редактор, который мне сказали использовать.

Есть ли способ сохранить самодостаточный iframe? Так что он делает все внутри iframe и не пытается пробиться в родительский фрейм?

Ответы [ 2 ]

9 голосов
/ 28 ноября 2012

Если дочерний iframe загружен из другого домена, он не сможет получить доступ к родительской странице или DOM.

Тем не менее, существует еще одна возможная уязвимость для атаки «человек посередине», как показано ниже. Предположим, что ваша страница загружается http://yoursite.com, а iframe переходит на http://badsite.org

  • первый http://badsite.org перенаправляет на http://yoursite.com/badpage

  • Это шаг, который требует атаки "человек посередине". Злоумышленник должен либо иметь возможность попасть между пользователем и yoursite.com, либо контролировать ответы на ваш поиск DNS. Это проще, чем кажется - любой, кто имеет административный контроль над общедоступной точкой доступа WiFi, может это сделать (например, Starbucks, отели, аэропорты). Цель состоит в том, чтобы доставить контент http://yoursite.com/badpage с сайта злоумышленника, не ваш реальный сайт.

  • После этого (злоумышленник) может атаковать любой вредоносный код, который ему нравится. http://yoursite.org/badpage. Поскольку он находится в том же домене, что и главная страница, он будет иметь доступ к родительскому DOM.

Атрибут HTML5 iframe для песочницы, кажется, является способом избежать этого. Вы можете прочитать spec , но лучшее описание может быть здесь .

Это поддерживается в Chrome , IE10 , FireFox , Safari .

В спецификации сказано, что если атрибут «allow-same-origin» установлен , а не , «контент обрабатывается как уникальный источник». Это должно помешать вашему дочернему элементу iframe получить доступ к любой части DOM родителя, независимо от того, что браузер считает URL-адресом.

0 голосов
/ 05 декабря 2011

Вам не нужно беспокоиться об этом.

Единственный способ, когда iframes может общаться между собой - это postMessage, и это возможно, только если вы слушаете этот домен напрямую.

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

...