【发布时间】:2012-05-26 08:53:46
【问题描述】:
我正在为X-Frame-Options 实施“直通”,以让合作伙伴网站将我雇主的网站包装在 iframe 中,如本文所述:http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx
(拆分 URL 以发布)
简而言之,我们合作伙伴的页面有一个 iframe,其中包含一个针对我们域的 URL。
对于我们域中的任何页面,他们都会添加一个特殊的 url 参数,例如 &@mykey=topleveldomain.com,告诉我们页面的顶级域是什么。
我们的过滤器从 URL 中提取合作伙伴 TLD(如果提供),并根据白名单对其进行验证。如果它在列表中,我们会发送带有值 ALLOW-FROM topleveldomain.com 的 X-Frame-Options 标头(并添加 cookie 以供将来点击)。如果它不在我们的白名单上,我们会发送SAMEORIGIN 或DENY。
问题在于,对于最新的 Firefox 和 Google Chrome,发送 ALLOW-FROM domain 会导致整体无操作。至少,IE8 似乎正确实现了ALLOW-FROM。
查看此页面:http://www.enhanceie.com/test/clickjack。在“应该显示内容”的第 5 个(共 5 个)框之后,是一个不应该显示内容的框,但它是。在这种情况下,iframe 中的页面发送X-Frame-Options: ALLOW-FROM http://www.debugtheweb.com,这是一个与http://www.enhanceie.com 截然不同的顶级域名。然而,框架仍然显示内容。
关于X-Frame-Options 是否真正在相关(桌面)浏览器中使用ALLOW-FROM 实现有任何见解吗?可能语法变了?
一些感兴趣的链接:
- x-frame-options 上的 rfc 草案:https://datatracker.ietf.org/doc/html/draft-gondrom-frame-options-01
- developer.mozilla 文章将标头讨论为 2 选项标头(同源或拒绝)。 https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
- 发起整个事情的msdn博客:http://blogs.msdn.com/b/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx
- msdn 博客讨论了 3 个值:添加 allow-from origin http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx
【问题讨论】:
-
如果您自己想出更多答案,请随时发布您自己的答案。你会得到我的支持!
-
昨天为 Firefox 添加了一个补丁:bugzilla.mozilla.org/show_bug.cgi?id=690168 我们会看看它是否能通过审核并很快发布到您附近的浏览器中......
-
老问题,但为了后代 - 您描述的方法(将 TLD 作为参数传递给 iframe)很容易被任何想要嵌入您的内容的人击败。他们只会查看源代码,查看您在做什么,然后复制/粘贴。由于 ALLOW-FROM 尚不可靠,您可以使用一个共享密钥,该密钥与当前时间(在一个窗口内)进行加密散列并包含在 iframe URL 中。在 iframe 端,验证散列共享密钥。内容窃贼可以窃取该哈希值,但它只能在一个短暂的窗口内起作用,从而有效地阻止未经授权的嵌入。
标签: firefox google-chrome x-frame-options clickjacking