解决方案 · CSP 调试器
如何排查 Content Security Policy script-src 错误
从被阻止的脚本追踪到实际生效的 CSP 指令,再测试范围明确的来源、nonce 或 hash 修改,避免削弱整个策略。
打开 CSP 调试器快速回答
快速回答
读取浏览器报告的被阻止 URL 与实际生效指令,确认响应中启用的 CSP,并只修改导致违规的来源表达式。
从浏览器违规消息开始
CSP 控制台消息通常会指出被阻止的资源、被违反或实际生效的指令,以及当前策略的一部分。应复制完整消息;截断的截图可能隐藏解释阻止原因的来源表达式或回退关系。
然后在浏览器开发者工具中检查最终文档响应。策略可由 HTTP 响应头传递,也可以在有限条件下由 meta 元素传递。多个策略会同时执行,因此只修改一个策略,未必能解除另一个策略施加的限制。
确认实际生效的脚本指令
script-src 控制 JavaScript 来源;script-src-elem 可对 script 元素覆盖它,script-src-attr 则控制内联事件处理属性。更具体的指令缺失时,浏览器先回退到 script-src;如果 script-src 也不存在,再回退到 default-src。
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com
在此策略下,来自其他源的脚本会被阻止,除非另一个适用策略允许该来源。浏览器报告中的 effective-directive 字段可以帮助判断应检查 script-src、更具体的脚本指令,还是 default-src 回退。
使用 CSP 调试器
- 打开 CSP 调试器。
- 粘贴当前生效的 Content-Security-Policy 值。
- 如有条件,粘贴完整的浏览器 CSP 错误。
- 查看解析后的指令、被阻止资源与实际生效指令。
- 将建议来源与确实需要信任的资源进行对比。
调试器在浏览器本地分析这些内容。它会解析输入文本并标出可能的修复方向,但不会执行你的应用,也不能替代浏览器测试。
选择范围最小的修复
对于预期的外部脚本,只在适用指令中加入所需的协议和主机。确认是否涉及子域名、端口或重定向。除非安全审查明确接受所有匹配来源,否则应避免 * 或 https: 这类宽泛默认值。
对于预期的内联脚本,优先考虑:
- 在可行时将脚本移动到已允许的外部文件。
- 为每次响应生成密码学随机 nonce,并把相同 nonce 应用于被允许的 script 元素。
- 对固定内联代码块使用稳定 hash,并在内容变化时更新 hash。
不要把 'unsafe-inline' 当作惯性修复。MDN 说明它会允许该指令覆盖的所有内联脚本,并建议使用 nonce 或 hash。
在生产部署前测试
使用 Content-Security-Policy-Report-Only 或预发布环境观察违规,避免意外破坏生产功能。覆盖会动态加载脚本的页面路径和用户操作,并确认 CDN 转换后的最终响应头,而不是只检查源站配置。
确认预期行为后再部署强制策略,并持续监控新的违规。来源列表应保持精确,避免未来第三方被攻破后获得不必要的脚本执行权限。
常见错误
- 实际限制来自
script-src-elem、另一个策略或回退,却只修改script-src。 - 未检查重定向、准确协议和端口,就直接复制被阻止主机。
- 添加
*、https:或'unsafe-inline'来大范围消除错误。 - 在多个响应中复用静态 nonce。
- 计算 hash 的脚本内容与浏览器收到的内容不同。
- 只测试源站响应头,而 CDN 又添加了其他策略。
局限
Scopeva 只分析你提供的文本,无法看到运行时 DOM 修改、浏览器扩展、框架生成的 nonce、报告端点或未包含在输入中的策略。实际强制行为仍应以浏览器开发者工具和受控预发布测试为准。
使用 Scopeva 验证
检查实际返回的配置
打开 CSP 调试器,检查上文所述的公开信号。修改生产环境配置前,请确认匹配规则或返回的响应。
打开 CSP 调试器常见问题
关于此任务的问题
缺少 script-src 时,哪条指令会控制脚本?
如果策略中没有 script-src,浏览器会回退到 default-src。
遇到内联脚本错误时,应直接添加 unsafe-inline 吗?
默认不应这样做。允许全部内联脚本会削弱重要的 CSP 防护;应优先使用每次响应生成的 nonce、合适的 hash,或把代码移到已允许的外部文件。
Scopeva 能证明修改后的策略在浏览器中有效吗?
不能。Scopeva 解释你提供的策略与控制台消息。部署到生产环境前,应在 report-only 模式或预发布环境中测试真实响应和应用。
依据
官方参考资料
技术行为最后核查于 2026年11月5日。
