【问题标题】:Error with migrating my Chrome Extension to Manifest v3将我的 Chrome 扩展程序迁移到 Manifest v3 时出错
【发布时间】:2022-01-09 17:46:42
【问题描述】:

我想将我的 Chrome 扩展程序迁移到清单 V3。
清单 V2 上的 content_security 策略如下所示:

{...
"content_security_policy": "script-src 'self' 'sha256-...'; object-src 'self'"
}

请注意,我使用的是最具体的属性 sha-256 值。
此外,我使用this tool 进行了“半官方”转换。

当我将清单转换为 V3 然后更新扩展时,我得到以下error。我不明白为什么它被认为是不安全的 CSP 值,而它在 Manifest V2 上被接受并且被认为可以安全地使用代码的指定哈希值。
我该如何克服它?

【问题讨论】:

  • “半官方”工具不起作用,但并不奇怪。

标签: google-chrome google-chrome-extension manifest manifest.json chrome-extension-manifest-v3


【解决方案1】:

在 manifest MV3 中,CSP 是一个对象,但是在错误中它是一个字符串,因此需要重新格式化。


来自migration guide:的示例和说明

清单 V2

"content_security_policy": "..."

清单 V3

"content_security_policy": {
  "extension_pages": "...",
  "sandbox": "..."
}
  • extension_pages:此政策涵盖您的扩展程序中的页面,包括 html 文件和服务人员。

    这些页面类型由chrome-extension:// 协议提供。例如,您的扩展程序中的一个页面是chrome-extension://<extension-id>/foo.html

  • 沙盒:此政策涵盖您的扩展程序使用的任何sandboxed extension pages

重要!

此外,MV3 不允许对 MV2 中允许的 extension_pages 进行某些 CSP 修改。 script-src、object-src 和 worker-src 指令只能具有以下值:

  • 自我
  • 任何 localhost 源,(http://localhost、http://127.0.0.1 或这些域上的任何端口)

沙盒的 CSP 修改没有这样的新限制。


通过本指南,扩展页面似乎不允许使用 sha-256 值。但这些通常是内联脚本。您可以将脚本保存为 js 文件,然后使用 <script/> 标签从那里加载它;这不需要 CSP 策略。

【讨论】:

  • 非常感谢您提供的信息丰富的轶事!关于替换不受支持的 sha-256 值的解决方案:我的整个扩展是用 react-app 设计的,因此我总是在浏览器上启动它之前构建它,所以所有代码层次结构都是一团糟。对于不使用代码哈希值执行整个构建应用程序,您有什么建议?
  • 使用js文件,并使用script标签加载,则不需要CSP。可能需要编写自定义脚本来自动执行此步骤。
猜你喜欢
  • 1970-01-01
  • 2023-02-14
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2020-11-28
  • 2022-10-06
相关资源
最近更新 更多