CSP设置后图片资源被阻止,如何排查?

Tr° 焕玲 阅读 30

最近给项目加CSP头时发现图片加载失败,控制台提示”Blocked … source of ‘http://…’ isn’t listed”。我试过在标签用nonce和在CSP头添加,但问题依旧存在。

当前CSP头配置是这样的:


Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self';

但请求的图片路径明明是相对地址,为什么还是被拦截?另外第三方CDN的图片该怎么正确配置?求大神指点具体排查步骤…

我来解答 赞 8 收藏
二维码
手机扫码查看
2 条解答
FSD-红佑
相对路径被拦截大概率是协议或域名不匹配,浏览器会补全为完整URL。先确认页面协议和域名,然后把CSP里的img-src改成这样:

Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' https://your-cdn-domain.com;

第三方CDN图片就在img-src后面追加对应域名,多个用空格隔开。记得清除缓存再测,别问我怎么知道的。就这样。
点赞 1
2026-02-19 05:01
百里朱莉
问题应该出在你把 default-src 设成了 'none',然后只显式放行了部分资源类型。虽然图片路径是相对地址,但浏览器最终解析时会补全成完整 URL,这时候 img-src 'self' 理论上是对的,但有几个常见坑点得排查。

第一步先打开浏览器开发者工具,看 Network 面板里图片请求的实际响应头是不是真的带上了你设的 CSP。有时候中间件、CDN 或反向代理会覆盖或修改头部,你自己写的策略根本没生效。

第二步检查图片实际请求的域名。比如你以为是 /static/logo.png,但如果页面在 https://a.example.com 下,而图片请求发到了 http://a.example.com(注意是 http),那就算同域名,协议不同也会被 'self' 拦掉。'self' 严格匹配协议+主机+端口。

第三,如果用了内联 data:image 的图片,比如 ,这种需要 img-src 里加上 'data:' 才能放行。

第四,第三方 CDN 图片的话,在 img-src 后面加上对应域名就行。比如:
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' https://cdn.example.com https://another-cdn.com;


注意要用 https,别用 http,除非真要支持 http(不推荐)。也可以临时加 unsafe-eval 和 unsafe-inline 做测试,确认是不是 CSP 导致的问题,但上线前必须去掉。

最后建议开发环境先用 Content-Security-Policy-Report-Only 头来试,收集报错日志而不真正阻断,避免直接干掉正常功能。等报告稳定了再切到正式策略。
点赞 2
2026-02-11 06:06