我正在为X-Frame-Options
实施“传递”,让合作伙伴网站将我的雇主的网站包装在iframe中,如本文所述:http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx
(将网址拆分为帖子)
简而言之,我们合作伙伴的网页上有一个iframe,其中包含针对我们域名的网址。
对于我们域中的任何页面,他们都会添加一个特殊的网址参数,例如&@mykey=topleveldomain.com
,告诉我们网页的顶级域名是什么。
我们的过滤器从网址获取合作伙伴TLD(如果提供),并根据白名单对其进行验证。如果它在列表中,我们会发送带有值X-Frame-Options
的{{1}}标头(并为将来的点击添加Cookie)。如果它不在我们的白名单中,我们会发送ALLOW-FROM topleveldomain.com
或SAMEORIGIN
。
问题是,对于最新的Firefox和Google Chrome,发送DENY
结果似乎总体无操作。至少IE8似乎正在正确实现ALLOW-FROM domain
。
查看此页面:http://www.enhanceie.com/test/clickjack。在“应该显示内容”的第5个(第5个)框之后,是一个不应该显示内容的框,但是。在这种情况下,iframe中的页面正在发送ALLOW-FROM
,这是一个与X-Frame-Options: ALLOW-FROM http://www.debugtheweb.com
截然不同的TLD。然而,框架仍然显示内容。
是否可以在相关(桌面)浏览器中使用http://www.enhanceie.com
真正实现X-Frame-Options
?也许语法已经改变了?
一些感兴趣的链接:
答案 0 :(得分:35)
ALLOW-FROM。请参阅MDN文章:https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
您已经在做一个自定义标题并使用正确的数据发送它的工作,当您检测到它来自有效的合作伙伴并且将DENY添加到其他所有请求时,您是否只能排除标题?当你已经动态构建逻辑时,我没有看到AllowFrom的好处吗?
答案 1 :(得分:17)
我发布了这个问题并且从未看到过反馈(几个月之后就出现了,似乎:)。
正如Kinlan所说,所有浏览器都不支持ALLOW-FROM作为X-Frame-Options值。
解决方案是根据浏览器类型进行分支。对于IE,请发送X-Frame-Options。对于其他人,请发送X-Content-Security-Policy。
希望这会有所帮助,并且抱歉花了这么长时间来关闭循环!
答案 2 :(得分:6)
对于Chrome,而不是
response.AppendHeader("X-Frame-Options", "ALLOW-FROM " + host);
您需要添加Content-Security-Policy
string selfAuth = System.Web.HttpContext.Current.Request.Url.Authority;
string refAuth = System.Web.HttpContext.Current.Request.UrlReferrer.Authority;
response.AppendHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.msecnd.net vortex.data.microsoft.com " + selfAuth + " " + refAuth);
到HTTP-response-headers。
请注意,这假设您在服务器上检查了是否允许refAuth。
另请注意,您需要进行浏览器检测,以避免为Chrome添加allow-from
标头(在控制台上输出错误)。
有关详细信息,请参阅my answer here.