2011-12-05 165 views
8

我有一个iframe页面。页面和iframe的来源位于不同的域中。在iframe中,我使用了一个名为CuteEditor的丰富文本编辑器(事实证明它不是那么可爱)。 CuteEditor中有一些javascript函数试图访问'文档',但浏览器拒绝访问,因为它们不在同一个域中。如何防止iframe访问父框架?

这里是确切的错误:

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

编辑JavaScript是出了问题的,因为它已经minfied和混淆,因此所有的变量名是神秘的。

使用不同的编辑器目前是没有问题的,因为这是一个工作项目,这是我被告知要使用的编辑器。

有没有办法让iframe自成一体?所以它在iframe中执行所有操作,并且不会尝试突出显示父框架?

回答

-2

您不应该担心这种情况。

iframes可以交叉处理的唯一方法是使用postMessage,这只有在您直接监听该域时才有可能。

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

+0

然而CuteEditor由于这个错误而不能在iframe中工作。那么这是一个不同的问题吗? – Justin

+0

我不确定。我们需要查看您的源代码。 –

7

如果孩子的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

这似乎支持ChromeIE10FireFox,Safari

规范说如果“allow-same-origin”属性是而不是集合,则“该内容被视为来自独特的来源”。无论浏览器认为URL是什么,这应该会阻止您的子级iframe访问父级DOM的任何部分。

+0

攻击并非如此简单。当设备从DNS获取到yoursite.com的地址时,它将缓存进一步的访问。要完全实施此攻击,需要HTTP代理,并且中间人必须重写网页才能将http://yoursite.com/badpage用作iframe src。如果您使用HTTPS,这会变得更加复杂,因为代理必须将HTTPS模仿为HTTP才能更改页面。这并非不可能,但除非网站对攻击者(如银行,拍卖或可用于收集密码的访问量巨大的网站)具有吸引力,否则您的曝光率很低。 – fernacolo