Chrome扩展迁移Manifest V3时含sha256的CSP配置报错如何解决?
Manifest V3 CSP 报错解决方案
问题根因
Manifest V3 对内容安全策略(CSP)的配置规则做了两项和V2不兼容的强制调整:
- 配置格式从单字符串改为分作用域的对象结构,核心作用域包含
extension_pages(覆盖扩展后台页面、弹出页、选项页等核心页面)、sandbox(覆盖沙箱页面) extension_pages作用域的script-src禁止使用哈希值、'unsafe-inline'、'unsafe-eval'规则,即使哈希属于安全实践也不被允许,这就是触发报错的直接原因。
解决步骤
- 第一步:将内联JS代码全部抽离为独立本地JS文件,通过
<script src="对应文件路径"></script>引入,extension_pages默认允许'self'来源的本地脚本,不需要额外添加哈希认证。 - 第二步:将CSP配置调整为Manifest V3要求的对象格式,示例如下:
{ "manifest_version": 3, // 其他扩展配置项省略 "content_security_policy": { "extension_pages": "script-src 'self'; object-src 'self'", // 如果你确实需要运行带哈希认证的脚本,必须放到沙箱环境中 "sandbox": "sandbox allow-scripts; script-src 'self' 'sha256-你之前使用的哈希值'; object-src 'none'" }, // 用到沙箱时需要额外声明沙箱页面路径 "sandbox": { "pages": ["你的沙箱页面路径.html"] } }
- 额外说明:如果你的脚本不需要特殊权限,仅做逻辑运算,才适合放到沙箱环境运行;需要调用扩展API的脚本必须放在
extension_pages覆盖的页面中,且完全抽离为本地文件,不能使用哈希。
内容的提问来源于stack exchange,提问作者El Pollo Loco
相关产品推荐
相关产品推荐

