如何阻止iframe访问父框架?

时间:2011-12-05 19:47:09

标签: 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中执行所有操作并且不会尝试突破到父框架?

2 个答案:

答案 0 :(得分:9)

如果子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沙箱属性似乎是避免这种情况的方法。您可以阅读spec,但最佳说明可能是here

这似乎得到了ChromeIE10FireFoxSafari的支持。

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

答案 1 :(得分:-3)

你不应该担心这种情况发生。

iframe可以交叉来源的唯一方法是使用postMessage,这只有在你直接收听该域时才有可能。

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