如果我创建一个窗口小部件并将其嵌入到来自不同域的网站上的<iframe>
中,那么窗口小部件可以读取多少关于父页面的数据?
显然没有DOM访问权限,但是是否可以访问其他信息,例如父页面是否有父页面,或父页面的URL是什么?
答案 0 :(得分:2)
通常,来自其他域的iframe内容无法以任何方式访问父级。这就像在不同的浏览器选项卡中加载页面一样。
但是,即使从不同的域提供服务,也可能存在允许访问父DOM的中间人攻击。这比听起来容易 - 任何对公共WiFi接入点拥有管理控制权的人都可以进行这种攻击(想想星巴克,酒店,机场)。
可以使用HTML5 iframe沙箱属性防止此攻击 - 请参阅下文。
中间人攻击的工作原理如下。假设您的网页加载http://yoursite.com,iframe转到http://badsite.org
这是需要中间人攻击的步骤。攻击者必须能够在用户和yoursite.com之间进行访问,或者控制DNS查找的答案。目标是从攻击者的网站提供http://yoursite.com/badpage的内容,而不是您的实际网站。
然后,攻击者可以从(假)http://yoursite.org/badpage提供他们喜欢的任何恶意代码。因为它与主页面位于同一个域中,所以它可以访问父DOM。
HTML5 iframe沙箱属性似乎是避免这种情况的方法。您可以阅读spec,但最佳说明可能是here。
这似乎得到了Chrome,IE10,FireFox,Safari的支持。
规范说如果“allow-same-origin”属性不设置,“内容将被视为来自唯一来源。”这样可以防止您的子iframe访问父DOM的任何部分,无论浏览器认为该URL是什么。
Sandbox还允许您禁用脚本,弹出窗口,更改顶级URL以及其他内容。
答案 1 :(得分:-2)
我进行了一些谷歌搜索,但事实证明,如果内容是另一个域(相同的原始政策),通常无法访问Iframe的内部内容,但是有一个{{ 3}}它可以为你提供一些解决方法。