Firefox Manifest V3扩展中Chrome sandbox等效替代及eval执行问题
在Firefox Manifest V3扩展中执行eval的解决方案
Firefox Manifest V3支持执行eval,但它的实现逻辑和Chrome的sandbox字段机制不同,你需要通过正确配置内容安全策略(CSP)来实现:
1. 配置CSP的sandboxed_pages策略
Firefox MV3没有直接对应Chromesandbox字段的配置,而是通过content_security_policy中的sandboxed_pages块来为指定页面开放eval权限。你需要在manifest.json中添加如下配置:
"content_security_policy": { "extension_pages": "script-src 'self'; object-src 'none';", "sandboxed_pages": "script-src 'self' 'unsafe-eval'; object-src 'none';" }
extension_pages是扩展核心页面(背景页、内容脚本等)的默认CSP,保持默认安全配置即可;sandboxed_pages专门用于需要放宽权限的页面,添加'unsafe-eval'后,该策略下的页面即可正常执行eval。
同时要确保你的custom_page.htm是作为沙箱页面加载的:比如通过扩展内的iframe嵌入,或者用browser.tabs.create直接打开该页面,Firefox会自动将匹配的页面应用sandboxed_pages的CSP规则。
2. 关键注意事项
- 不要在
extension_pages的CSP中添加'unsafe-eval',这会破坏整个扩展的安全性,Firefox也不推荐这种做法; new Function()这类动态代码执行方式和eval受同样的CSP限制,同样需要在sandboxed_pages策略中开放权限;- 如果你是在内容脚本或背景脚本中尝试执行
eval,这种场景下无法通过CSP放宽权限,只能将动态代码逻辑转移到沙箱页面中运行。
内容的提问来源于stack exchange,提问作者Guido Preite
相关产品推荐
相关产品推荐

