81

根据这篇文章,我正在实施“传递”,X-Frame-Options让合作伙伴网站将我雇主的网站包装在 iframe 中:http: //blogs.msdn.com/b/ieinternals/archive/2010/03/30 /combating-clickjacking-with-x-frame-options.aspx

(拆分 URLS 发布)

简而言之,我们合作伙伴的页面有一个 iframe,其中包含针对我们域的 URL。对于我们域中的任何页面,他们都会添加一个特殊的 url 参数,例如&@mykey=topleveldomain.com,告诉我们页面的顶级域是什么。

我们的过滤器从 URL 中提取合作伙伴 TLD(如果提供),并根据白名单对其进行验证。如果它在列表中,我们会发送X-Frame-Options带有值的标题ALLOW-FROM topleveldomain.com(并添加一个 cookie 以供将来点击)。如果它不在我们的白名单上,我们会发货SAMEORIGINDENY.

ALLOW-FROM domain问题在于,对于最新的 Firefox 和 Google Chrome,它看起来像是以无操作的方式发送结果。至少,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跨相关(桌面)浏览器实现的任何见解?也许语法已经改变?

一些感兴趣的链接:

4

3 回答 3

44

Chrome 或 Safari 不支持 ALLOW-FROM。请参阅 MDN 文章:https ://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options

您已经在做一个自定义标头并使用正确的数据发送它,当您检测到它来自有效合作伙伴时,您是否可以不排除标头并将 DENY 添加到所有其他请求?当您已经动态构建逻辑时,我看不到 AllowFrom 的好处吗?

于 2013-02-15T11:39:55.383 回答
24

我发布了这个问题,但从未看到反馈(似乎是在几个月后出现的:)。

正如 Kinlan 所提到的,并非所有浏览器都支持 ALLOW-FROM 作为 X-Frame-Options 值。

解决方案是根据浏览器类型进行分支。对于 IE,发送X-Frame-Options。对于其他所有人,发送X-Content-Security-Policy

希望这会有所帮助,很抱歉花了这么长时间来关闭循环!

于 2013-10-04T20:23:18.257 回答
11

对于 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 响应标头。
请注意,这假设您在服务器上检查了是否允许 refAuth。
另外,请注意,您需要进行浏览器检测以避免allow-from为 Chrome 添加标头(在控制台上输出错误)。

有关详细信息,请在此处查看我的答案。

于 2017-04-10T12:40:19.260 回答