这很奇怪,我已经检查过并试图做很多事情无济于事。
我有一个简单的文件上传,它在上传之前显示图像。这在我的本地开发环境中工作正常,它也可以在登台服务器上正常工作。
在生产服务器上,它不起作用。这是我的控制台中显示的内容:
拒绝加载图片'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';">
有人能说清楚为什么这可能不起作用吗?
答案 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-element处meta
元素的使用详情:
注意:将强制执行通过
meta
元素指定的策略 与受保护资源有效的任何其他策略无关 他们被指定的地方。强制执行多重的一般影响 策略在§8.1多策略的影响中描述。8.1。多个政策的影响
影响是将其他策略添加到策略列表中 强制执行只能进一步限制受保护资源的功能。
因此,您的生产服务器发送的Content-Security-Policy
标头似乎已img-src 'self' data:
,但为了允许您的图片网址并避免您看到的错误,{{1}生产服务器发送需求的标头至少还包括Content-Security-Policy
在其源列表中:blob:
。