Firefox中的帧的X-Frame-Options和Content-Security-Policy

时间:2015-06-23 22:29:05

标签: security firefox frame content-security-policy x-frame-options

Content Security Policy specification says

  

frame-ancestors指令废弃了X-Frame-Options标头。如果资源同时具有两个策略,则应该强制执行frame-ancestors策略,并且应该忽略X-Frame-Options策略。

因此,根据我的理解,如果同时存在Content-Security-PolicyX-Frame-Options标头,则应忽略X-Frame-Options

我有一个带有两个标头的网络应用,看起来Firefox 38忽略Content-Security-Policy标头,而是使用X-Frame-Options标头。

我的示例标题是:

Content-Security-Policy:frame-ancestors 'self' local.com *.local.com 
X-Frame-Options:Allow-From http://local.com

我希望我的框架可以从local.com和所有子域访问。 Local.com就是一个例子。如果存在X-Frame-Options标头,那么它只允许http://local.com,但如果我将其删除,则Firefox会使用Content-Security-Policy标头,并且适用于域和子域。

这是否意味着Firefox没有实现这一部分?或者它只是太新的规范而且Firefox还没有实现呢?有没有其他方法可以强制使用Content-Security-Policy标题?

我知道Chrome可以与Content-Security-Policy一起使用,IE可以与X-Frame-Options一起使用,但看起来我无法合并两个标头,因为Firefox的工作方式不正确。

一种可能的方法是仅针对IE发送X-Frame-Options,针对所有其他方式发送Content-Security-Policy,但还有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

frame-ancestors仅出现在CSP级别2中(请参阅changelog),因此Firefox 38很可能还没有实现它。

您可以通过观看JavaScript控制台轻松验证 - 浏览器将显示有关其无法理解的每个CSP指令的警告。

您也可以从 beta 频道下载Firefox,看看它是否有所不同,但显然如果您只是想为生产网站构建可互操作的解决方案,它将不会有多大帮助。