在 Chrome 擴充功能中導入內容和網路篩選功能的方式有很多種。本指南提供擴充功能可用的內容篩選功能總覽,以及 Chrome 擴充功能可使用的不同篩選方法、技術和 API。
篩選網路要求
在 Chrome 擴充功能中篩選網路要求的主要方式是使用 chrome.declarativeNetRequest API。開發人員可以透過宣告式網路要求,指定宣告式規則來封鎖或修改網路要求。宣告式網路請求規則格式是以大多數廣告攔截器使用的篩選器清單語法功能為基礎。
這些規則可以:
- 封鎖網路要求。
- 將網址配置升級為安全配置 (http 升級為 https,或 ws 升級為 wss)。
- 重新導向網路要求。
- 修改要求或回應標頭。
Chrome 支援擴充功能隨附的規則,以及動態更新的規則 (例如因應遠端設定或使用者輸入內容)。
將篩選規則與擴充功能組合
擴充套件中包含的規則稱為「靜態規則」。安裝或升級擴充功能時,系統會安裝及更新這些規則。Chrome 會限制擴充功能可宣告的靜態規則數量。
對於靜態的宣告式網路要求規則,Chrome 有 30 萬條規則的共用全域集區,可供已安裝的擴充功能集共同使用。此外,每個擴充功能都保證有 30000 條靜態規則的配額。舉例來說,如果使用者只安裝一個內容篩選擴充功能,該擴充功能最多可使用 330,000 條靜態宣告式網路要求規則。如要瞭解規則數量,以大多數廣告攔截器使用的熱門 EasyList 篩選器清單為例,其中包含約 35,000 條網路規則。
靜態宣告式網路請求規則可整理成不同的規則集。擴充功能最多可指定 100 個靜態規則集,且一次最多可啟用 50 個規則集。
在執行階段動態新增篩選規則
部分規則無法與擴充功能組合。擴充功能必須在執行階段新增這些項目。這些規則稱為「動態規則」。
如果是動態宣告式網路要求規則,Chrome 允許每個擴充功能最多有 30,000 條安全動態規則。大多數規則都視為安全規則:block、allow、allowAllRequests 或 upgradeScheme。即使規則不安全 (例如 redirect),仍可動態新增,但上限較低,最多只能新增 5,000 條,且會計入 30,000 條動態規則的上限。為方便您瞭解,easylist 篩選器清單中 98% 至 99% 的規則都是安全規則。
內容篩選擴充功能可分別使用靜態和動態規則,將已知的篩選規則與擴充功能組合,並視需要從伺服器更新擴充功能,加入新的內容篩選規則。
根據觀察到的要求調整規則
廣告生態系統不斷演進,因此內容篩選器也必須隨之更新。結合 chrome.webRequest 和動態宣告網路要求規則,即可分析網路要求是否有潛在的隱私權侵害行為,並在日後封鎖這些要求。
基本做法如下:
- 使用
chrome.webRequestAPI 分析網路要求,並嘗試自動識別不符合隱私權規定的要求,例如使用機器學習技術。 - 為步驟二中識別出的每項要求建立動態宣告式網路要求規則,以便日後封鎖類似要求。
- (選用) 將識別出的 Declarative Net Request 規則傳回伺服器,以便在下次更新擴充功能時,將該規則新增為靜態 Declarative Net Request 規則。
這種做法的好處是分析作業會非同步進行,不會對網站效能造成負面影響。
允許使用者自行定義篩選規則
您可以在擴充功能中提供篩選器設定 UI,讓使用者自行定義內容篩選規則。將這些使用者定義的規則轉換為 Declarative Net Request 規則,然後新增為動態規則。這些規則會持續提供給使用者,因為規則會保留在瀏覽器工作階段和擴充功能升級中。使用這種方法,使用者最多可新增 30,000 條自訂規則。
篩選網頁上的元素
篩選網路要求只是內容篩選的重要環節之一。另一項重要功能是直接從網頁移除不想要的內容。舉例來說,超過 40% 的 easylist 篩選器清單規則,定義了用戶端應如何隱藏網頁元素。
您可以使用內容指令碼達成這個目標。內容指令碼會在網頁的環境中執行,並使用 DOM 變更網頁。
Chrome 擴充功能不得執行遠端託管的程式碼。不過,伺服器中關於要隱藏哪些元素的資料不會受到影響,因為這類資料屬於設定資料,因此必要時可以在執行階段更新元素規則。
篩選政策安裝擴充功能的網路要求
企業和教育機構的使用案例通常對內容和網路篩選有極嚴格的要求,例如根據內容篩選要求。為啟用這些用途,已安裝政策的擴充功能可透過其他方式篩選及封鎖網路要求。在 webRequest API 中使用「封鎖」選項搭配事件,即可實作程式輔助內容篩選器,針對每個要求執行自訂邏輯,決定是否應封鎖要求。這項功能僅適用於透過政策安裝的擴充功能,因為這類擴充功能的信任等級較高。
攔截瀏覽要求
您可以使用宣告式網路要求規則篩選導覽要求。舉例來說,您可能想略過將使用者重新導向至預期目的地的追蹤網址。其中一種做法是將導覽要求 https://tracker.com?redirect=https%3A%2F%2Fexample.com 重新導向至擴充功能頁面 (必須設定為可供網路存取的資源),然後執行指令碼來擷取重新導向目標,並使用 window.location.replace("https://example.com") 重新導向至目的地,藉此規避連結追蹤器。