X-Frame-Options:在Firefox和Chrome中允许来自ALLOW-FROM

Rob*_*Rob 66 firefox google-chrome x-frame-options clickjacking

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

(将URL分拆为帖子)

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

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

问题是,ALLOW-FROM domain对于最新的Firefox和谷歌浏览器,整体上的结果似乎是无差异.至少,IE8似乎正在正确实施ALLOW-FROM.

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

是否X-Frame-Options真正实现ALLOW-FROM跨相关(桌面)浏览器的任何见解?也许语法已经改变了?

一些感兴趣的链接:

Kin*_*lan 38

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

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

  • 然后他会看看引用标题,这是一个很好的方式,虽然引用欺骗是活生生的.如果所有相关页面都是HTTPS,那么要做得更加困难.AllowFrom绝对是首选. (4认同)
  • 对不起,编辑切断了我的解释!我们决定来自客户端的HTTP_REFERER是一个用于控制决策的不可靠机制.此外,我们发现一些浏览器(我特别相信IE)不会从包含顶层iframe的页面传递HTTP_REFERER.因此,我们没有可靠的方法来判断谁是从服务器框架我们. (3认同)

Rob*_*Rob 21

我发布了这个问题,从未看到过反馈(几个月之后出现,似乎:).

正如Kinlan所提到的,ALLOW-FROM在所有浏览器中都不支持作为X-Frame-Options值.

解决方案是基于浏览器类型进行分支.对于IE,运送X-Frame-Options.对于其他人,请发布X-Content-Security-Policy.

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

  • 在目前的形式中,"X-Content-Security-Policy"不提供"ALLOW-FROM"的跨浏览器模拟.Firefox支持`frame-ancestors`,即将推出的规范支持`frame-options`.目前,Chrome仅在运行时标志后面支持这些"frame-ancestors".`frame-src`可用,但这是控制子帧的父帧,而不是指定其允许父项的子帧. (6认同)
  • 2018年更新:[现在已很好地支持“内容安全性策略”](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP#Browser_compatibility)。 (2认同)

Ste*_*ger 7

对于Chrome,而不是

response.AppendHeader("X-Frame-Options", "ALLOW-FROM " + host);
Run Code Online (Sandbox Code Playgroud)

你需要添加 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);
Run Code Online (Sandbox Code Playgroud)

到HTTP-response-headers.
请注意,这假设您在服务器上检查了是否允许refAuth.
另外,请注意,您需要进行浏览器检测,以避免allow-from为Chrome 添加标头(在控制台上输出错误).

有关详细信息,请参阅我的答案.

  • 如果您想避免点击劫持,可以使用Content-Security-Policy,但绝对不能通过添加'default-src'属性,因为它具有完全不同的效果.你会想要使用'frame-ancestors'.这类似于X-Frame-Options,它更灵活,因为它允许您指定多个域.请参阅:https://martijnvanlambalgen.wordpress.com/2015/06/28/clickjacking/ (4认同)