改进 Manifest V3 中的内容过滤

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

更多静态规则集

过滤条件规则集通常分组为多个列表。例如,较为宽泛的列表可以包含适用于所有用户的规则,而较为具体的列表可能会隐藏只有某些用户希望屏蔽的与位置相关的内容。直到最近,我们都允许每个扩展程序向用户提供 50 个列表(即“静态规则集”)的选择,并允许同时启用其中 10 个列表。在与社区的讨论中,扩展程序开发者提供了有说服力的证据,表明对于某些用例来说该数值太低。在考虑了此 API 在 Chrome 中的性能之后,我们现在允许同时启用多达 50 个 API。(值得注意的是,这远远高于 WECG 中要求的 20 项要求的数量限制。)我们还允许总共允许 100 个规则集。此功能已在 Chrome 120 中推出,Firefox 和 Safari 均支持提高限制,他们都在此提案中提供了早期建议。

更多动态规则

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

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

因此,我们只允许扩展程序最多添加 5,000 条规则,这有利于我们谨慎地使用此功能,并使我们更容易检测到滥用行为。

不过,来自 AdGuard 和 Adblock Plus 等扩展程序的开发者进行了自己的分析并共享了数据,提高上限可以实现更多最新的规则,并且拥有更多自定义列表的用户可以迁移到 Manifest V3。事实上,AdGuard 报告称,每周对热门列表进行 2600 多次更改,在使用自定义过滤列表的用户中有 5% 的用户中,有 1/4 的用户总共针对这些应用设置了 5000 多条动态规则(来源)。AdGuard 认为,这是将其扩展程序迁移到 Manifest V3 的巨大挑战,我们也从其他内容拦截器那里收到类似的反馈。

我们发现某些过滤规则(例如操作为 blockallow 的规则)更为安全,不易被滥用。大部分广告屏蔽过滤规则也恰巧是使用这些规则。在此基础上,我在 Web Extensions 社区小组中起草并共享了一个提案,旨在定义一组我们认为风险较低且允许其中最多 30,000 条的规则。我们仍维持上限,以避免性能下降。

此提案得到了 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 查看器扩展程序的常见请求。在任何情况下,我们都会继续传达我们的工作成果,并定期通过 Web Extensions 社区小组来讨论想法并就下一步的工作达成一致。