关于 CSP 的一个问题

2016-03-23 15:11:06 +08:00
 bwangel

有个问题,半天解决不了,希望万能的 v 友们来帮助帮助俺!

需求是这样的,在网站的一个页面中嵌入一个 iframe ,这个 iframe 指向另外一个网站(一个 jupyter 的 notebook )。在 safari 中访问没有问题,在 chrome 和 Firefox 中访问发现由于 CSP 的原因禁止。

我找到了这个网站(content-security-policy)[http://content-security-policy.com/],然后发现child-src字段是 CSP Level2 的规范,被 Chrome 40+和 Firefox 45+支持,这个字段就是定义 iframe 允许的源。于是我在 jupyter notebook 的响应头中添加了child-src: '*',然后 Firefox 可以访问了,但是 Chrome 还不可以!

我的 Chrome 版本是 49.0.

Chrome 报的错误是:

Refused to display 'http://127.0.0.1:8888/notebooks/2/2.ipynb' in a frame 
because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self'".
2947 次点击
所在节点    Python
7 条回复
bwangel
2016-03-23 15:11:56 +08:00
v2ex 没办法发图吗?想发个截图的。。。
virusdefender
2016-03-23 15:22:04 +08:00
frame-ancestors 是规定当前页面可以被哪些页面以 iframe,frame,object 等方式加载,所以你要看下 jupyter 是不是也有 CSP 策略。
virusdefender
2016-03-23 15:22:57 +08:00
而 child-src 是限制你的网站可以 iframe 的 url
bwangel
2016-03-23 15:41:49 +08:00
我刚刚直接在 notebook 的设置里面,通过 tornado 的设置,直接添加了一个头

```
frame-ancestors: '*';
```
Chrome 还是不支持, notebook 应该已经设置了这个字段了,我去搜搜文档,看看有没有什么设置方法!
bwangel
2016-03-23 15:43:19 +08:00
术语好像不大准确,应该叫做首部字段,不是头。。
bwangel
2016-03-23 15:49:31 +08:00
bwangel
2016-03-23 15:56:27 +08:00
坑爹啊,我照着 github 上它的文档设置了 frame-ancestors ,结果 chrome 和 Firefox 都不能访问了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/265766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX