改善 Manifest V3 的內容篩選功能

過去一年來,我們積極與眾多內容封鎖擴充功能背後的廠商討論,探討如何改進 MV3 擴充功能平台。根據這些討論,許多 WebExtensions 社群群組 (WECG) 曾與其他瀏覽器合作,並帶來顯著的改善措施。

更多靜態規則集

多組篩選器規則通常會組成清單。舉例來說,一份內容較籠統的清單可能包含適用於所有使用者的規則,而一份更明確的清單可能會隱藏只有部分使用者想封鎖的特定地區內容。截至最近,我們允許每則擴充功能,為使用者提供 50 份清單 (或「靜態規則集」),以及其中 10 份清單。在與社群討論的過程中,擴充功能開發人員提供了有力證據,證明這項功能對某些用途而言太低。瞭解這個 API 在 Chrome 中的效能和討論後,現在最多可同時啟用 50 個。(明顯高於 WECG 中要求的上限 20 個)。以及總共 100 個規則集。這是 Chrome 120 中的這項功能,而 Firefox 和 Safari 都支援提高此上限的數量,因為 Firefox 和 Safari 都能協助參與這項提案。

更多動態規則

大部分的規則都是「靜態」的,每次更新額外資訊時都會寄出。不過,為了支援更頻繁的更新和使用者定義規則,擴充功能也可以動態新增規則,開發人員不必將新版擴充功能上傳到 Chrome 線上應用程式商店。

如果擴充功能可以以未經檢查的方式,在 Chrome 線上應用程式商店審查期間動態修改要求,使用者可能會面臨網路釣魚或資料遭竊的風險。舉例來說,重新導向規則可能遭到濫用,在未經使用者同意的情況下插入聯盟連結。

因此,我們最多只允許擴充功能加入 5,000 項規則,但該規則的用意是嚴格鼓勵使用,以利偵測濫用情形。

不過,AdGuard 和 Adblock Plus 等擴充功能的開發人員會自行執行分析和共用資料。如果上限較高,系統就能更新規則,以及自訂名單數量較多的使用者可遷移至 Manifest V3。事實上,AdGuard 指出,熱門名單每週有超過 2600 項變更。使用自訂篩選器清單的 5% 使用者中,有四分之一的人總共產生超過 5,000 項動態規則 (資料來源)。AdGuard 指出,在將擴充功能遷移至 Manifest V3 時,這是一項重大的挑戰,而我們也收到了來自其他內容攔截器的類似意見回饋。

我們判定部分篩選規則 (例如對 blockallow 執行者) 比較安全,且較不容易遭到濫用。這些設定也剛好形成大部分的廣告封鎖篩選器規則。因此,我在網路擴充功能社群群組中草擬了一份提案,並分享一份提案,定義一組我們認為風險較低的規則,最多可允許 30,000 項規則。我們仍會設定上限,以免發生效能迴歸問題。

這項提案是在 Web Extensions Community Group 獲得支援,因此我們加以實行。自 Chrome 121 起,安全 DNR 規則的上限是 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 檢視器擴充功能,這是很常見的要求。不論如何,我們會持續溝通工作成果,並定期透過網頁擴充功能社群群組討論想法並規劃後續發展。