文件预览中的内容安全策略违规

时间:2017-03-31 20:47:37

标签: html5 google-chrome content-security-policy

这很奇怪,我已经检查过并试图做很多事情无济于事。

我有一个简单的文件上传,它在上传之前显示图像。这在我的本地开发环境中工作正常,它也可以在登台服务器上正常工作。

在生产服务器上,它不起作用。这是我的控制台中显示的内容:

  

拒绝加载图片'blob:https://example.com/a7ced718-483b-4bc2-9db0-f012c8c6af5a',因为它违反了以下内容安全政策指令:“img-src'self'数据:

但是,我没有定义CSP,它在用于登台测试bug的精确副本服务器上运行良好。

此外,我尝试在文档头部的元标记中添加CSP,但它也没有解决问题。这是我试图实施的CSP:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

有人能说清楚为什么这可能不起作用吗?

1 个答案:

答案 0 :(得分:3)

检查服务器正在发送的响应标头(使用浏览器devtools或curl或其他)。

生产服务器必须发送Content-Security-Policy响应标头。

如果是这样,您的meta元素无效的原因是,浏览器使用限制最严格的CSP策略,无论指定位置如何 - 并且生产服务器发送的Content-Security-Policy标头限制性更强而不是你用meta元素指定的那个。

https://w3c.github.io/webappsec-csp/#multiple-policies查看有关多个政策的详细信息以及https://w3c.github.io/webappsec-csp/#meta-elementmeta元素的使用详情:

  

注意:将强制执行通过meta元素指定的策略   与受保护资源有效的任何其他策略无关   他们被指定的地方。强制执行多重的一般影响   策略在§8.1多策略的影响中描述。

     

8.1。多个政策的影响

     

影响是将其他策略添加到策略列表中   强制执行只能进一步限制受保护资源的功能。

因此,您的生产服务器发送的Content-Security-Policy标头似乎已img-src 'self' data:,但为了允许您的图片网址并避免您看到的错误,{{1}生产服务器发送需求的标头至少还包括Content-Security-Policy在其源列表中:blob: