過去一年,我們積極與多個內容封鎖擴充功能的供應商討論,尋找改善 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 時面臨的重大挑戰,我們也收到其他內容封鎖工具的類似意見回饋。
我們判定某些篩選器規則 (例如動作為 block
或 allow
的規則) 較為安全,且不易遭到濫用。這些元素也恰好是廣告封鎖篩選器規則的大部分內容。基於這個原因,我在 Web Extensions 社群群組中草擬並分享一項提案,定義一組我們認為風險較低的規則,並允許最多 30,000 個。我們仍會設有上限,以免影響效能。
這項提案獲得 Web Extensions 社群群組的支持,因此我們已實作這項提案。自 Chrome 121 起,安全 DNR 規則的限制上限為 30,000 個規則,我們將這類規則定義為具有 block
、allow
、allowAllRequests
或 upgradeScheme
動作的規則。
根據 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 討論相關構想,並就我們想進一步探討的內容達成共識。