Content-Security-Policy如何与X-Frame-Options配合使用?

Yel*_*yev 23 http http-headers x-frame-options content-security-policy

是否Content-Security-Policy忽略X-Frame-Options,服务器返回,或者是X-Frame-Options还在初级?

假设我有:

浏览器会加载此框架吗?

目前还不清楚.
一方面,http://a.com明确否认框架.
另一方面,http://b.com明确允许为http://a.com构建框架.

Ana*_*hat 37

frame-srcCSP指令(其已被弃用,替换child-src)确定什么来源可以在页面上的框架来使用.

X-Frame-Options响应头,在另一方面,确定哪些网页中可以使用该页面在iframe.

在您的情况下,http://a.comwith X-Frame-Options: DENY表示没有其他页面可以在框架中使用它.它http://b.com的CSP中没有任何内容 - 没有页面可以http://a.com在框架中使用.


X-Frame-Options与CSP相交的地方是通过frame-ancestors指令.从CSP的具体化(强调我的):

该指令类似于X-Frame-Options多个用户代理已实现的标头.所述'none'源表达是大致相当于该标头的DENY,'self'SAMEORIGIN等.主要区别在于许多用户代理实现 SAMEORIGIN了它只匹配顶级文档的位置.该指令检查每个祖先.如果任何祖先不匹配,则取消加载.[RFC7034]

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

一个较旧的问题表明当时这在Firefox中不起作用,但希望现在情况发生了变化.


更新2018年4月:

内容安全政策:指令'child-src'已被弃用.请使用指令'worker-src'来控制worker,或使用指令'frame-src'来分别控制帧.

看起来child-src现在已被弃用,现在frame-src又回来了.

  • 据我现在所知,在当前的 3 级草案中,“child-src”和“frame-src”都没有被弃用。如果我理解正确的话,“child-src”包含“frame-src”和“worker-src”,但老实说,在这一点上,我的大脑正在融化,试图弄清楚什么是什么。 (3认同)

小智 7

您的假设都不是普遍正确的。

  • Chrome会忽略X-Frame-Options
  • Safari 9及以下版本会忽略CSP frame-ancestors
  • Safari 10-12遵循CSP frame-ancestors指令,但如果同时指定了两者,则优先考虑 X-Frame-Options

  • @NathanCH,是的,正是.. Safari12 将 XFO 优先于 CSP。现在我们面临问题,因为我们在我们的代码中使用 SFO-sameorigin 和 CSP 作为“X-FRAME-OPTIONS”--> SAMEORIGIN“Content-Security-Policy”,“frame-ancestors 'self' *.abcd.net ”。我们如何使用 SFO 指定 URL? (2认同)
  • 我需要在Chrome上忽略X-Frame-Options的引用。我可以找到的数据表明它忽略了ALLOW-FROM,但对于其他值来说很好。 (2认同)