打开网易新闻 查看精彩图片

1.5亿用户每天用的浏览器扩展,安装流程比银行转账还复杂。有人想批量装个插件,结果在Hacker News上发了篇长文吐槽,引来几百条"我也栽过"的跟帖。

这事得从一个疯狂实验说起:有人试图用脚本把Firefox扩展商店里的插件全部下载一遍。不是真想用,就想看看能不能成。结果代码跑到一半,发现Mozilla的防线比想象中厚得多。

你以为拖个文件进去就行?太天真了

你以为拖个文件进去就行?太天真了

大多数人的直觉是这样的:扩展不就是.xpi文件吗,ZIP改个后缀而已,复制粘贴多简单。Firefox会教你做人。

从Firefox 43开始,每个扩展必须经过Mozilla签名认证。没签名的?浏览器直接当病毒处理。这个设计初衷是好的——防止恶意插件泛滥——但副作用是彻底堵死了自动化安装的路。

签名验证只是第一道关。接下来还有manifest解析、兼容性检查、数据库状态同步。漏掉任何一步,扩展要么装不上,要么装上也不加载,最惨的是被标记为"损坏"然后静默失效。

一位在Reddit上分享踩坑经历的开发者说得很直白:「我花了三小时写下载脚本,又花了两天研究为什么装完不生效。」

扒开Firefox的扩展管理系统

扒开Firefox的扩展管理系统

Firefox把扩展信息分散在三个地方,像个故意分散风险的财务系统。

extensions.json是核心账本,记录每个扩展的ID、版本、启用状态、安装来源。这个文件在配置文件夹里,但手工改它等于自杀——Firefox会检测哈希不一致,直接重置整个数据库。

addons.json是缓存层,存的是从AMO(addons.mozilla.org)拉来的元数据。你可以删掉它,下次启动会自动重建。但extensions.json不行,它是唯一可信来源。

真正的扩展文件藏在extensions/目录下,是解压后的完整代码。但光有文件没用,必须在extensions.json里注册过才会被加载。

这个架构设计有个名字:单点可信。所有状态以extensions.json为准,其他都是缓存或派生数据。好处是一致性强,坏处是外部工具几乎无法介入。

AMO API:能下载,不等于能安装

AMO API:能下载,不等于能安装

Mozilla给扩展商店提供了v5版API,文档写得相当体面。用slug(扩展的URL标识)就能查到下载链接:

GET https://addons.mozilla.org/api/v5/addons/addon/{slug}/ 返回的JSON里,current_version.file.url就是.xpi的直接下载地址。

写个Python脚本批量下载?二十分钟搞定。但下载完的.xpi文件,Firefox拒绝直接加载。

问题出在签名验证环节。每个.xpi里嵌着Mozilla的签名证书,Firefox启动时会重新校验。证书链、时间戳、文件完整性,一个不对就拒载。更麻烦的是,签名和特定Firefox版本还有绑定关系——今天能装的扩展,明天可能就因为证书策略更新而失效。

那个Hacker News上的实验者算过一笔账:按他的下载速度,遍历全部扩展需要连续跑47天。但这只是下载,真正能在干净环境里装上的,比例不到三成。大部分失败不是因为网络,而是因为签名验证的隐藏规则。

企业部署的灰色地带

企业部署的灰色地带

Mozilla不是完全不给活路。企业版Firefox支持策略文件(policies.json),可以强制安装指定扩展。但这个功能有个尴尬的定位:它要求你用企业版,或者手动改配置,而且扩展必须来自AMO或企业自己的签名服务器。

更隐蔽的通道是about:config里的xpinstall.signatures.required。设为false可以跳过签名检查,但Mozilla早就放话了:这个开关只在ESR(长期支持版)和开发者版里保留,普通用户版随时可能移除。

一位在内部邮件列表里讨论过这个问题的Mozilla工程师透露:「我们讨论过完全移除这个选项,但企业客户的反对声太大。」

这就形成了一个奇怪的局面:个人用户想自动化装插件,基本没戏;企业用户有官方通道,但得接受Mozilla的审核和限制;开发者夹在中间,两边规则都不完全适用。

为什么Mozilla要设这么多障碍

为什么Mozilla要设这么多障碍

答案藏在2015年的一场安全危机里。当时Chrome Web Store和Firefox的扩展生态都遭遇了大规模恶意插件入侵,广告注入、数据窃取、流量劫持层出不穷。Mozilla的应对策略是收紧签名政策,代价就是牺牲灵活性。

这个决策有个副作用:它把"扩展管理"变成了浏览器内部的特权操作,外部工具被系统性排斥。想批量部署?走官方渠道。想自定义?自己编译Firefox。

对比Chrome的扩展管理,差异很明显。Chrome允许通过组策略(Group Policy)和企业版工具批量安装,签名验证虽然也存在,但企业有完整的绕过机制。Firefox的选择更激进:安全优先,便利性靠后。

这种设计哲学延伸到了WebExtension API的方方面面。同样的扩展,在Chrome上可能用三个权限就能跑,在Firefox上会被拆成五个更细粒度的申请。用户看得更清楚,开发者写得更麻烦。

那个试图下载全部扩展的实验者最后放弃了。他在更新里写道:「我算明白了,这不是技术问题,是产品设计问题。Mozilla不想让你这么做,代码只是执行意图的工具。」

如果你现在打开Firefox的配置文件夹,盯着extensions.json里那些哈希值和签名指纹,可能会想:这套系统防住了多少恶意插件,又挡住了多少合法需求?Mozilla自己大概也在权衡这个问题——2023年他们重启了"推荐扩展"计划的讨论,其中一个议题就是如何让可信的第三方工具重新获得部分管理能力。

但截至目前,批量自动化安装扩展在Firefox里仍然是个半地下话题。论坛里有零散的技巧分享,官方文档保持沉默,而每个试图深入的人,最终都会撞同一堵墙。