【问题标题】:ensuring that iframed content cannot access parent via javascript确保 iframed 内容无法通过 javascript 访问父级
【发布时间】:2011-09-06 10:47:00
【问题描述】:

虽然我知道如果域、协议等不匹配,xss 规则应适用于 iframed 内容,但我想知道是否有任何方法可以进一步确保 iframed 内容无法通过 javascript 访问父级。

例如,即使域端口和协议 DO 匹配。

基本思路是这样的:

1) domain.com 包含多个包含第 3 方广告的 iframe

2) 包含横幅代码的 iframe 托管在 ads.domain.com 上

3) 在大多数情况下,第 3 方广告是通过 ads.domain.com 上托管的框架内的类似方式加载的:

<script type="text/javascript" src="http://www.3rd-party-ad-provider.....

我们是否可以采取任何进一步的步骤来最终得到如下场景:

第 3 方 ads.domain.com domain.com(持有广告 iframe 的父级)

即使是仅在最新浏览器上兼容的步骤也是受欢迎的。有什么可以改善这一点的。我们看到相当多的 js 错误通过泄漏,我假设其中至少有一些是由于错误的广告代码破坏了父(top-est)文档正文。

谢谢!

【问题讨论】:

    标签: javascript html iframe xss


    【解决方案1】:

    虽然我知道如果域、协议等不匹配,xss 规则应适用于 iframed 内容,但我想知道是否有任何方法可以进一步确保 iframed 内容无法通过 javascript 访问父级。

    没有任何东西可以跨浏览器或没有副作用。

    第 3 方 ads.domain.com domain.com(持有广告 iframe 的父级)

    同源策略可以做到这一点。

    我们看到相当多的 js 错误泄漏,我假设其中至少有一部分是由于错误的广告代码破坏了父(顶级)文档正文。

    如果 JS 在一个框架中出错,那么它仍然会出错。它不应该触及顶层框架,但浏览器会报告错误。

    由于您正在处理第三方内容,因此您不能catch 错误。

    您可以简单地对广告商采取强硬立场,拒绝未通过质量控制的广告。您必须权衡拒绝广告的成本与改善访问者体验的好处。

    【讨论】:

    • 没关系。即使它将一些(甚至是现代)浏览器从列表中“淘汰”也会有所帮助。分享!
    • 我想不出有什么能让不止一个浏览器关闭的东西,而且不是没有你不喜欢的副作用(比如完全在框架中阻止 JS)。
    • 谢谢。我知道这个评论有点偏离问题,但是:添加“window.onerror=function(){return true;}”会抑制这些 iframe 中生成的错误(很可能是由错误的广告代码引起的)吗?
    • 想一想,它可能不会。因为这些人中的大多数使用脚本标签加载另一个 iframe,并且错误会在那里发生。
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多