改善 Manifest V3 的內容篩選功能

過去一年,我們積極與多個內容封鎖擴充功能的供應商討論,尋找改善 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 的報告指出,熱門清單每週會進行超過 2,600 次變更,而使用自訂篩選器清單的使用者中,四分之一的使用者總共使用超過 5,000 項動態規則 (來源)。AdGuard 指出,這是將擴充功能遷移至 Manifest V3 時面臨的重大挑戰,我們也收到其他內容封鎖工具的類似意見回饋。

我們判定某些篩選器規則 (例如動作為 blockallow 的規則) 較為安全,且不易遭到濫用。這些元素也恰好是廣告封鎖篩選器規則的大部分內容。基於這個原因,我在 Web Extensions 社群群組中草擬並分享一項提案,定義一組我們認為風險較低的規則,並允許最多 30,000 個。我們仍會設有上限,以免影響效能。

這項提案獲得 Web Extensions 社群群組的支持,因此我們已實作這項提案。自 Chrome 121 起,安全 DNR 規則的限制上限為 30,000 個規則,我們將這類規則定義為具有 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 討論相關構想,並就我們想進一步探討的內容達成共識。