Content Security Policy specification says
frame-ancestors指令废弃了X-Frame-Options标头。如果资源同时具有两个策略,则应该强制执行frame-ancestors策略,并且应该忽略X-Frame-Options策略。
因此,根据我的理解,如果同时存在Content-Security-Policy
和X-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
,但还有更好的方法吗?
谢谢!
答案 0 :(得分:5)
frame-ancestors
仅出现在CSP级别2中(请参阅changelog),因此Firefox 38很可能还没有实现它。
您可以通过观看JavaScript控制台轻松验证 - 浏览器将显示有关其无法理解的每个CSP指令的警告。
您也可以从 beta 频道下载Firefox,看看它是否有所不同,但显然如果您只是想为生产网站构建可互操作的解决方案,它将不会有多大帮助。