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

时间:2016-11-02 06:34:47

标签: http http-headers content-security-policy x-frame-options

Content-Security-Policy忽略X-Frame-Options,由服务器返回,或X-Frame-Options仍然是主要的?

假设我有:

浏览器会加载此框架吗?

目前尚不清楚。
一方面,http://a.com明确否认框架 另一方面,http://b.com明确允许http://a.com的框架。

3 个答案:

答案 0 :(得分:29)

frame-src CSP directive(已弃用并替换为child-src)确定可在页面框架中使用哪些来源。

另一方面,X-Frame-Options响应标头确定其他网页可以在iframe中使用该网页。

在您的情况下,http://a.com X-Frame-Options: DENY表示没有其他页面可以在框架中使用它。 {C}在其CSP中的含义无关紧要 - 任何网页都不能在框架中使用http://b.com

http://a.com与CSP相交的地方是frame-ancestors directive。来自CSP specificiation(强调我的):

  

该指令类似于几个X-Frame-Options标题   用户代理已实现。 X-Frame-Options源表达式是   大致相当于标题的'none'DENY'self',   等等。主要区别在于许多用户代理实现   SAMEORIGIN使其仅与顶级匹配   文件的位置。该指令检查每个祖先。如果有的话   祖先不匹配,负载被取消。 [RFC7034]

     

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

older question表示当时这在Firefox中不起作用,但希望现在情况发生了变化。

2018年4月更新:

  

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

看起来X-Frame-Options现已弃用,child-src又回来了。

答案 1 :(得分:5)

你的假设都没有普遍存在。

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

答案 2 :(得分:1)

答案是通过实践测试找到的 我创建了两个网站并重现了描述的情况。

似乎X-Frame-Options是主要的 如果目标服务器拒绝框架,则客户端网站无法在iframe Content-Security-Policy中设置private void DateTimePicker1_ValueChanged(object sender, EventArgs e) { if (dateTimePicker1.Value == DateTimePicker.MinimumDateTime) { dateTimePicker1.Value = DateTime.Now; // This is required in order to show current month/year when user reopens the date popup. dateTimePicker1.Format = DateTimePickerFormat.Custom; dateTimePicker1.CustomFormat = " "; } else { dateTimePicker1.Format = DateTimePickerFormat.Short; } } private void Clear_Click(object sender, EventArgs e) { dateTimePicker1.Value = DateTimePicker.MinimumDateTime; } 的任何值。

但是,我没有在文档中找到任何确认。

在Chrome 54和IE 11上测试。