X-Frame-Options:允许firefox和chrome中的FROM

X-Frame-Options:允许firefox和chrome中的FROM,firefox,google-chrome,x-frame-options,clickjacking,Firefox,Google Chrome,X Frame Options,Clickjacking,我正在为X-Frame-Options实现一个“传递”,让合作伙伴站点将我雇主的站点包装在一个iframe中,如本文所述: (拆分要发布的URL) 简而言之,我们的合作伙伴的页面有一个iframe,其中有一个针对我们域的URL。 对于我们域中的任何页面,他们都会添加一个特殊的url参数,如&@mykey=topleveldomain.com,告诉我们页面的顶级域是什么 我们的过滤器从URL中提取合作伙伴TLD(如果提供),并根据白名单进行验证。如果它在列表中,我们将从topleveldomain

我正在为
X-Frame-Options
实现一个“传递”,让合作伙伴站点将我雇主的站点包装在一个iframe中,如本文所述:

(拆分要发布的URL)

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

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

问题是,发送
ALLOW-FROM-domain
似乎会导致最新Firefox和Google Chrome的整体性能下降。至少IE8似乎正确地实现了
ALLOW-FROM

请签出此页面:。在“应该显示内容”的第5个(共5个)框之后,是一个不应该显示内容的框,但它是。在这种情况下,iframe中的页面正在发送
X-Frame-Options:ALLOW-FROMhttp://www.debugtheweb.com
,与
http://www.enhanceie.com
。然而,框架仍然显示内容

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

一些有趣的链接:

  • x-frame-options上的rfc草案:
  • developer.mozilla文章讨论了作为2选项头的头(sameorigin或deny)
  • 发起整个事件的msdn博客:
  • msdn博客讨论了3个值:从源代码添加allow

Chrome或Safari中不支持允许来自。见MDN文章:


您已经在制作自定义头并将其与正确的数据一起发送,当您检测到该头来自有效的合作伙伴并向每个其他请求添加拒绝时,是否可以将其排除在外?当您已经在动态构建逻辑时,我看不到AllowFrom的好处?

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

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

解决方案是基于浏览器类型进行分支。为了我,船。对于其他人,船

希望这能有所帮助,很抱歉花了这么长时间才结束这个循环

用于铬,而不是

response.AppendHeader(“X-Frame-Options”、“ALLOW-FROM”+主机);
您需要添加
内容安全策略

string selfAuth=System.Web.HttpContext.Current.Request.Url.Authority;
字符串refAuth=System.Web.HttpContext.Current.Request.urlreferer.Authority;
response.AppendHeader(“内容安全策略”,“默认src'self'”不安全内联“不安全评估”数据:*.msecnd.net vortex.data.microsoft.com“+selfAuth+”+refAuth);
到HTTP响应头
注意,这假设您在服务器上检查是否允许重新授权
另外,请注意,您需要进行浏览器检测,以避免为Chrome添加
allow from
标题(控制台上的输出错误)


有关详细信息,请参见

,如果您能自己找到更多答案,请随时发布您自己的答案。你会得到我的一票!昨天为Firefox添加了一个补丁:我们将看看它是否能够通过审查并很快发布到您附近的浏览器中……这是一个古老的问题,但对于子孙后代来说——您描述的方法(将TLD作为参数传递给iframe)将很容易被任何想要嵌入您的内容的人击败。他们只是查看源代码,查看您正在做什么,然后复制/粘贴。由于ALLOW-FROM还不可靠,因此可以使用共享秘密,该秘密在当前时间(在窗口内)以加密方式散列,并包含在iframe URL中。在iframe端,验证哈希共享机密。内容窃贼可以窃取该散列,但它只能在一个短暂的窗口内工作,有效阻止未经授权的嵌入。他在链接的msdn页面上的令牌标题下实施4步安全措施,不幸的是,这在chrome和safari中不起作用。是的,我知道,这就是为什么我建议反其道而行之。那时他会看着referer头,这是一个不错的方法,尽管referer欺骗仍然存在。如果所有有问题的页面都是HTTPS,那么要做到这一点就要困难得多。AllowFrom当然会更好。谢谢你的回复和建议!对不起,打断我的解释!我们认为来自客户端的HTTP_REFERER是一种不可靠的机制,用于控制决策。此外,我们发现一些浏览器(我特别相信IE)不会从包含顶层iframe的页面传递HTTP_REFERER。因此,我们无法可靠地从服务器上辨别谁在陷害我们。在其当前形式中,
X-Content-Security-Policy
没有为
ALLOW-from
提供跨浏览器模拟。Firefox支持
帧祖先
,并且即将推出的规范支持
帧选项
。目前,Chrome只支持运行时标志后面的
帧祖先
frame src
可用,但这是控制子帧的父帧,而不是指定其允许的父帧的子帧。2018更新:。如果要避免点击劫持,可以使用内容安全策略,但绝对不能通过添加“default src”属性,因为这具有完全不同的效果。您需要使用“框架祖先”。这与X-Frame-Options类似,并且它更灵活,因为它允许您指定多帧