X 帧-选项: 允许在火狐和铬-FROM

我正在为 X-Frame-Options实现一个“ pass-through”,让合作伙伴站点将我雇主的站点包装在一个 iframe 中,如本文所述: http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx

(拆分网址发布)

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

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

问题是它看起来像发送 ALLOW-FROM domain结果在最新的火狐和谷歌浏览器的整体无操作。至少 IE8似乎正确地实现了 ALLOW-FROM

看看这个页面: http://www.enhanceie.com/test/clickjack。在“应该显示内容”的第5个框之后,是一个不应该显示内容的框,但它是。在本例中,iframe 中的页面正在发送 X-Frame-Options: ALLOW-FROM http://www.debugtheweb.com,这是一个与 http://www.enhanceie.com完全不同的 TLD。然而,框架仍然显示内容。

对于 X-Frame-Options是否真的跨相关(桌面)浏览器使用 ALLOW-FROM实现,有什么见解吗?也许语法改变了?

一些感兴趣的链接:

243672 次浏览

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

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

我发布了这个问题,但从来没有看到反馈(似乎是在几个月之后:)。

作为 金兰提到过,并非所有浏览器都支持 ALLOW-FROM作为 X-Frame-Options值。

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

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

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

有关详细信息,请参阅 我的答案就在这里。