改进 Manifest V3 中的内容过滤

在过去一年里,我们一直在积极与多款内容屏蔽扩展程序背后的供应商讨论如何改进 MV3 扩展程序平台。在这些讨论(其中许多是在 WebExtensions 社区组 [WECG] 中与其他浏览器合作进行的)的基础上,我们能够做出重大改进。

更多静态规则集

一组过滤规则通常会分组到列表中。例如,更通用的列表可能包含适用于所有用户的规则,而更具体的列表可能会隐藏仅部分用户希望屏蔽的位置特定内容。直到最近,我们允许每个扩展程序为用户提供 50 个列表(或“静态规则集”)供其选择,并且同时启用其中的 10 个。在与社区讨论时,扩展程序开发者提供了有说服力的证据,证明此限制对于某些用例来说过低。在考虑这些讨论内容后,我们在 Chrome 中研究了该 API 的性能,现在允许同时启用最多 50 个。(请注意,这远高于 WECG 中请求的 20 个上限。)我们还允许您创建总计 100 个规则集。此功能将在 Chrome 120 中发布,Firefox 和 Safari 都支持提高此限制,并就此提案提供了早期反馈。

更多动态规则

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

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

因此,我们仅允许扩展程序添加最多 5,000 条规则,以鼓励谨慎使用此功能,并便于我们更轻松地检测滥用行为。

不过,AdGuard 和 Adblock Plus 等扩展程序的开发者进行了自己的分析并分享了数据,认为提高限制后,系统可以支持更多更新的规则,并且自定义列表数量较多的用户也可以迁移到 Manifest V3。事实上,AdGuard 报告说,热门列表每周都会发生超过 2,600 次更改,在使用自定义过滤器列表的 5% 用户中,有四分之一的用户总共有超过 5,000 条动态规则(来源)。AdGuard 指出,这是将其扩展程序迁移到 Manifest V3 时遇到的一个重大挑战,我们也从其他内容拦截器那里收到了类似的反馈。

我们确定,某些过滤规则(例如操作为 blockallow 的规则)更安全,也更不容易被滥用。它们恰好构成了大多数广告拦截过滤规则。基于此,我在 Web Extensions 社区群组中起草并分享了一项提案,以定义一组我们认为风险较低且最多允许 3 万个的规则。我们仍会保留上限,以避免性能回归。

此提案在 Web Extensions 社区群组中获得了支持,因此我们将其付诸实施。从 Chrome 121 开始,3 万 条规则的上限适用于安全的 DNR 规则,我们将其定义为操作为 blockallowallowAllRequestsupgradeScheme 的规则。

根据 AdGuard 分享的数据,98% 到 99% 的规则都应该能从这个更高的上限中受益。我们仍支持所有其他规则,并且您可以在现有限制范围内添加这些规则。

在 Chrome 中,此值以 MAX_NUMBER_OF_DYNAMIC_RULES 常量提供。所有其他动态网络请求规则的规则数上限保持为 5,000 个。

缩减了规则集大小

在 Chrome 118 中,我们根据社区的反馈, isUrlFilterCaseSensitive 字段的默认值更改为了 false。此字段用于控制按网址过滤的规则是否区分大小写。我们发现,大多数开发者的扩展程序中的默认值不同。因此,必须多次设置该值。通过这项更改,开发者能够显著缩减规则集的大小。

下一步该做什么?

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

我们将继续审核现有限制,并根据需要进行调整。为此,我们计划在不久的将来分享我们在此过程中收集的一些数据。此外,我们还在努力添加其他功能,例如与响应标头匹配的功能,这是 PDF 阅读器扩展程序的常见请求。无论如何,我们都会继续分享我们的工作进展,并定期使用 Web Extensions Community Group 讨论想法,并就我们接下来要研究的内容达成共识。