Esistono diversi modi per implementare il filtro dei contenuti e della rete nelle estensioni di Chrome. Questa guida fornisce una panoramica delle funzionalità di filtro dei contenuti disponibili per le estensioni e dei diversi approcci, tecniche e API di filtraggio che possono essere utilizzati dalle estensioni di Chrome.
Filtra le richieste di rete
Il modo principale per filtrare le richieste di rete nelle estensioni Chrome è utilizzare l'API browser.declarativeNetRequest. Con Declarative Net Request, gli sviluppatori possono bloccare o modificare le richieste di rete specificando regole dichiarative. Il formato delle regole Declarative Net Request si basa sulle funzionalità della sintassi dell'elenco dei filtri utilizzata dalla maggior parte dei programmi di blocco degli annunci.
Queste regole sono in grado di:
- Blocca una richiesta di rete.
- Esegui l'upgrade dello schema URL a uno schema sicuro (da http a https o da ws a wss).
- Reindirizza una richiesta di rete.
- Modificare le intestazioni di richiesta o risposta.
Chrome supporta le regole incluse in un'estensione e quelle aggiornate dinamicamente (ad esempio in risposta a una configurazione remota o a un input dell'utente).
Raggruppa le regole di filtro con l'estensione
Le regole incluse nel pacchetto di estensioni sono chiamate "regole statiche". Queste regole vengono installate e aggiornate quando un'estensione viene installata o aggiornata. Chrome limita il numero di regole statiche che un'estensione può dichiarare.
Per le regole statiche di Declarative Net Request, Chrome dispone di un pool condiviso globale di 300.000 regole che possono essere utilizzate congiuntamente dall'insieme di estensioni installate. Inoltre, a ogni estensione è garantita un'assegnazione di 30.000 regole statiche. Ad esempio, se un utente ha installato una sola estensione di filtraggio dei contenuti, l'estensione può utilizzare fino a 330.000 regole statiche di Declarative Net Request. Per farti un'idea di quante regole si tratta, il popolare elenco di filtri EasyList, utilizzato dalla maggior parte dei blocchi degli annunci, è composto da circa 35.000 regole di rete.
Le regole statiche di richiesta di rete dichiarativa possono essere organizzate in diversi set di regole. Un'estensione può specificare fino a 100 insiemi di regole statici e 50 di questi insiemi di regole possono essere abilitati contemporaneamente.
Aggiungere dinamicamente regole di filtro in fase di runtime
Alcune regole non possono essere raggruppate con l'estensione. Le estensioni devono invece aggiungerli in fase di esecuzione. Queste regole sono chiamate "regole dinamiche".
Per le regole dinamiche di Declarative Net Request, Chrome consente un massimo di 30.000 regole dinamiche sicure per estensione. La maggior parte delle regole sono considerate sicure: block, allow, allowAllRequests o upgradeScheme. Anche se una regola non è considerata sicura (ad esempio redirect), può comunque essere aggiunta in modo dinamico, ma con un limite massimo inferiore di 5000, che rientra anche nel limite di 30.000 regole dinamiche. Per dare un'idea, il 98-99% delle regole nell'elenco dei filtri di EasyList sono regole sicure.
Le estensioni di filtraggio dei contenuti possono utilizzare regole statiche e dinamiche rispettivamente per raggruppare le regole di filtraggio note con la propria estensione e per aggiornare le estensioni con nuove regole di filtraggio dei contenuti dai propri server in base alle necessità.
Adattare le regole in base alle richieste osservate
L'ecosistema pubblicitario è in continua evoluzione e i filtri dei contenuti devono essere aggiornati di conseguenza. Combinando browser.webRequest e regole DNR dinamiche, è possibile analizzare le richieste di rete per potenziali violazioni della privacy e bloccarle in futuro.
L'approccio di base è:
- Analizza le richieste web utilizzando l'API
browser.webRequeste prova a identificare automaticamente le richieste che non soddisfano i tuoi requisiti di privacy, ad esempio utilizzando il machine learning. - Crea una regola DNR (Declarative Net Request) dinamica per ogni richiesta identificata nel passaggio 2, in modo che le richieste simili vengano bloccate in futuro.
- (Facoltativo) Invia la regola Declarative Net Request identificata al tuo server in modo che possa essere aggiunta come regola statica Declarative Net Request con il successivo aggiornamento dell'estensione.
Il vantaggio di questo approccio è che l'analisi avviene in modo asincrono e non influisce negativamente sulle prestazioni del sito web.
Consenti agli utenti di definire le proprie regole di filtro
Puoi consentire agli utenti di definire le proprie regole di filtro dei contenuti fornendo un'interfaccia utente di configurazione del filtro nella tua estensione. Converti queste regole definite dall'utente in regole di richiesta di rete dichiarativa e aggiungile come regole dinamiche. Queste regole continueranno a essere disponibili per gli utenti, in quanto persistono nelle sessioni del browser e negli upgrade delle estensioni. Utilizzando questo approccio, gli utenti possono aggiungere fino a 30.000 regole personalizzate.
Filtrare gli elementi nelle pagine web
Il filtraggio delle richieste di rete è solo una parte importante del filtraggio dei contenuti. Un'altra parte importante è la rimozione dei contenuti indesiderati direttamente dalle pagine web. Ad esempio, più del 40% delle regole dell'elenco dei filtri EasyList definisce il modo in cui i client devono nascondere gli elementi della pagina.
Ciò può essere ottenuto utilizzando gli script di contenuti. Gli script dei contenuti vengono eseguiti nel contesto delle pagine web e possono apportare modifiche utilizzando il DOM.
Le estensioni di Chrome non sono autorizzate a eseguire codice ospitato in remoto. Tuttavia, i dati di un server sugli elementi da nascondere non sono interessati, in quanto sono considerati dati di configurazione. Pertanto, le regole degli elementi possono essere aggiornate in fase di runtime, se necessario.
Filtrare le richieste di rete nelle estensioni installate dai criteri
I casi d'uso aziendali e didattici spesso hanno requisiti estremamente rigorosi per il filtraggio dei contenuti e della rete, ad esempio il filtraggio delle richieste in base ai contenuti. Per attivare questi casi d'uso, le estensioni installate tramite criteri hanno un modo aggiuntivo per filtrare e bloccare le richieste di rete. Utilizzando l'opzione "blocking" con gli eventi nell'API webRequest, è possibile implementare un filtro dei contenuti programmatico che esegue una logica personalizzata su ogni richiesta per decidere se una richiesta deve essere bloccata o meno. Questa operazione è limitata alle estensioni installate tramite criteri, in quanto hanno un livello di attendibilità più elevato.
Intercettare le richieste di navigazione
Le richieste di navigazione possono essere filtrate utilizzando le regole di richiesta di rete dichiarativa. Ad esempio, potresti voler ignorare gli URL di monitoraggio che reindirizzano l'utente alla destinazione prevista. Un approccio per gestire questo problema è reindirizzare una richiesta di navigazione https://tracker.com?redirect=https%3A%2F%2Fexample.com a una pagina di estensione (che deve essere configurata come risorsa accessibile dal web), che eseguirà uno script per estrarre la destinazione del reindirizzamento e reindirizzare alla destinazione utilizzando window.location.replace("https://example.com"), aggirando il tracker dei link.