改进 Manifest V3 中的内容过滤

奥利弗·敦克
Oliver Dunk

在过去的一年里,我们积极与一些内容拦截扩展程序背后的供应商讨论如何改进 MV3 扩展程序平台。根据这些讨论(其中很多讨论是在 WebExtensions 社区群组 (WECG) 上与其他浏览器协作开展的),我们得以取得了显著的改进。

更多静态规则集

过滤规则集通常划分为不同的列表。例如,一个较宽泛的列表可以包含适用于所有用户的规则,而一个更具体的列表可能会隐藏针对特定地理位置的内容,只有部分用户想要屏蔽这些内容。此前,我们允许每个扩展程序向用户提供 50 个列表(或“静态规则集”),并允许同时启用其中 10 个列表。在与社区的讨论中,扩展程序开发者提供了令人信服的证据,证明这对于某些应用场景来说太低了。在评估了 Chrome 中的 API 性能并基于上述讨论后,我们现在允许同时启用多达 50 个 API。(值得注意的是,这明显高于 WECG 中提出的 20 个请求的限制。)我们还允许总共使用 100 个规则集。此项变更已在 Chrome 120 中推出,Firefox 和 Safari 也支持提高上限,他们都曾就此提案给出过早期意见。

更多动态规则

大多数规则都是“静态”的,并且会随扩展程序的每次更新而提供。不过,为了支持更频繁的更新和用户定义的规则,扩展程序也可以动态添加规则,而无需开发者将新版扩展程序上传到 Chrome 应用商店。

如果扩展程序能够以 Chrome 应用商店审核期间未经过检查的方式动态修改请求,就会让用户面临钓鱼式攻击或数据被盗的风险。例如,重定向规则可能会被滥用,在未经用户同意的情况下注入联属营销链接。

因此,我们只允许扩展程序添加多达 5,000 条规则,以鼓励用户谨慎使用这项功能,并让我们能更轻松地检测滥用行为。

不过,来自 AdGuard 和 Adblock Plus 等扩展程序的开发者会自行分析并共享数据,因此更高的限制可允许更新最新的规则,并让拥有更多自定义列表的用户迁移到 Manifest V3。事实上,AdGuard 报告称每周对热门列表的更改超过 2600 项,在使用自定义过滤器列表的 5% 的用户中,有四分之一的用户综合了超过 5,000 条动态规则(来源)。AdGuard 指出这是将其扩展程序迁移到 Manifest V3 的一个重大挑战,我们也收到了来自其他内容拦截器的类似反馈。

我们确定,一些过滤规则(例如操作为 blockallow 的规则)更安全,不太可能遭到滥用。而且,大多数广告屏蔽过滤规则也构成了这些屏蔽规则。基于这一考虑,我在 Web 扩展程序社区小组中起草并共享了一项提案,以定义一组我们认为风险较低的规则,允许最多 3 万条规则。我们仍会设置上限,以避免性能下降。

Web Extensions 社区小组支持这项建议,因此我们将其付诸实施。从 Chrome 121 开始,30,000 条规则的较高上限适用于安全的 DNR 规则,我们将其定义为具有操作 blockallowallowAllRequestsupgradeScheme 的规则。

根据 AdGuard 共享的数据,他们 98% 至 99% 的规则应该会受益于这一更高的限制。其余规则仍然受支持,可在现有限制范围内添加。

在 Chrome 中,此参数是 MAX_NUMBER_OF_DYNAMIC_RULES 常量。所有其他动态净请求规则的规则数量上限仍为 5,000。

缩减了规则集规模

在 Chrome 118 中,我们根据社区的反馈,将 isUrlFilterCaseSensitive 字段的默认值更改了为 false。此字段用于控制按网址过滤的规则是否区分大小写。此外,我们还了解到,大多数开发者的扩展程序中都有不同的默认设置。因此,必须反复设置此值。通过进行这项更改,开发者可以显著缩减其规则集的大小。

下一步该做什么?

我们致力于继续投资 declarativeNetRequest API,以便支持尽可能多的用例,并期待继续与社区合作。特别要感谢 WECG 的成员的大力支持,包括 AdGuard 分享了大量推动这项工作的数据,以及所有参与此 API 设计工作的浏览器供应商。

我们将继续审核设定的限制,以便根据需要做出调整。为此,我们计划在不久的将来分享这项工作所收集的部分数据。此外,我们还在努力添加其他功能,例如匹配响应标头的功能,这是我们在 PDF 查看器扩展程序中看到的常见请求。在任何情况下,我们都将继续传播工作成果,并定期使用网络扩展社区群组讨论想法,并就接下来的计划达成一致。