如何阻止iframe访问父框架?

Jus*_*tin 10 javascript iframe parent same-origin-policy

我有一个带有iframe的页面.iframe的页面和来源位于不同的域中.在iframe中我使用了一个名为CuteEditor的富文本编辑器(结果证明它不那么可爱).CuteEditor中有一些javascript函数试图访问"文档",但浏览器拒绝访问,因为它们不在同一个域中.

这是确切的错误:

访问属性"文档"的权限被拒绝 http://dd.byu.edu/plugins/cuteeditor_files/Scripts/Dialog/DialogHead.js 第1行

编辑javascript是不可能的,因为它已经被修改和混淆,因此所有变量名都是神秘的.

目前使用不同的编辑器是不可能的,因为这是一个工作项目,这是我被告知要使用的编辑器.

有没有办法让iframe保持独立?所以它在iframe中做了所有事情,并没有尝试突破到父框架?

Jon*_*ray 11

如果从不同的域加载子iframe,则它将无法访问父页面或DOM.

但是,如下所述,中间人攻击仍有可能存在漏洞.假设你的页面加载关闭http://yoursite.com和IFRAME去http://badsite.org

  • 首先http://badsite.org重定向到http://yoursite.com/badpage

  • 这是需要中间人攻击的步骤.攻击者必须能够在用户和yoursite.com之间进行访问,或者控制DNS查找的答案.这是很容易,它的声音-谁的人通过公共WiFi接入点具有管理控制能做到这一点的目标是服务的内容(想想星巴克,酒店,机场)http://yoursite.com/badpage从攻击者的网站,而不是您的实际网站.

  • 然后,攻击者可以从(假的)http://yoursite.org/badpage中提供他们喜欢的任何恶意代码 .因为它与主页面在同一个域中,所以它可以访问父DOM.

HTML5 iframe沙箱属性似乎是避免这种情况的方法.您可以阅读规范,但最好的描述可能在这里.

这似乎在Chrome,IE10,FireFox,Safari上得到支持.

规范说如果没有设置"allow-same-origin"属性,"内容将被视为来自唯一的来源".这样可以防止您的子iframe访问父DOM的任何部分,无论浏览器认为该URL是什么.


Jef*_*ney -6

您不必担心这种情况的发生。

iframe 跨源通信的唯一方法是使用 postMessage,并且只有当您直接侦听该域时才可能实现。

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