改善 Manifest V3 的內容篩選功能

德克 (Oliver Dunk)
Oliver Dunk

過去一年來,我們積極與數項內容封鎖擴充功能背後的廠商共同合作,目標是改善 MV3 擴充功能平台。根據這些討論結果,許多 WebExtensions Community Group (WECG) 曾與其他瀏覽器合作,共做出了顯著的改善。

更多靜態規則集

多組篩選器規則通常會分組為一份清單。舉例來說,較籠統的清單可包含所有使用者適用的規則,較明確的清單可能會隱藏特定位置的內容,只讓部分使用者封鎖。不久前,我們允許每個擴充功能提供 50 份清單 (或「靜態規則集」) 選項,且其中 10 份可同時啟用。在社群討論中,擴充功能開發人員提供了有把握的證據,證明瞭這項技術對某些用途來說太低。我們透過這些討論瞭解 Chrome 的 API 效能後,現在最多可以同時啟用 50 個 Pod。(值得一提的是,這個數字遠高於 WECG 中要求的上限 20)。並允許總共 100 個規則集。這是 Chrome 120 版的運費設定,如果 Firefox 和 Safari 都已針對這項提案提供初期建議,即支援提高上限。

更多動態規則

大部分的規則都是「靜態」的規則,且會在每次更新時傳送。不過,為了配合更頻繁的更新和使用者定義規則,擴充功能也能以動態方式新增規則,讓開發人員不必將新版擴充功能上傳到 Chrome 線上應用程式商店。

如果擴充功能可以動態修改要求,且未檢查 Chrome 線上應用程式商店時未檢查的內容,可能會讓使用者暴露在網路詐騙或資料遭竊風險中。舉例來說,有心人士可能會濫用重新導向規則,在未經同意的情況下插入聯盟連結。

因此,我們僅允許擴充功能加入最多 5,000 項規則,這些規則鼓勵謹慎使用這項功能,並方便我們偵測濫用情形。

不過,來自 AdGuard 和 Adblock Plus 等擴充功能的開發人員自行分析及共用資料,因上限較高而能執行更多最新規則,並為自訂名單數量較多的使用者遷移至 Manifest V3。事實上,AdGuard 回報了每週變更超過 2600 項常用清單,而有五成使用自訂篩選器清單的使用者中,有四分之一的人在所有名單中總共擁有超過 5,000 項動態規則 (資料來源)。AdGuard 指出,這對將擴充功能遷移至 Manifest V3 是一大挑戰。我們聽說有其他內容攔截器提出的類似意見回饋。

我們判定部分篩選規則 (例如含有 blockallow 的規則) 比較安全,並比較不容易遭到濫用。這些限制也適用於大多數的廣告封鎖篩選器規則。基於這個原因,我在 Web Extensions Community Group 中草擬並分享了一份提案,用來定義了我們考量降低風險的規則,且允許最多 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 檢視器擴充功能常見的要求。在任何情況下,我們都會繼續說明工作內容,並定期使用Web Extensions 社群群組討論想法,針對未來計畫達成共識。