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
这是需要中间人攻击的步骤.攻击者必须能够在用户和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