Filtro contenuti

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 filtro che possono essere utilizzati dalle estensioni di Chrome.

Filtrare le richieste di rete

Il modo principale per filtrare le richieste di rete nelle estensioni di Chrome è utilizzare l'chrome.declarativeNetRequest API. Con la richiesta di rete dichiarativa, gli sviluppatori possono bloccare o modificare le richieste di rete specificando regole dichiarative. Il formato delle regole della richiesta di rete dichiarativa si basa sulle funzionalità della sintassi dell'elenco di filtri utilizzata dalla maggior parte dei blocchi degli annunci.

Queste regole sono in grado di:

  • Bloccare una richiesta di rete.
  • Eseguire l'upgrade dello schema dell'URL a uno schema sicuro (da http a https o da ws a wss).
  • Reindirizzare 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 all'input dell'utente).

Raggruppare 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 sottoposta a upgrade. Chrome limita il numero di regole statiche che un'estensione può dichiarare.

Per le regole statiche della richiesta di rete dichiarativa, Chrome ha un pool condiviso globale di 300.000 regole che possono essere utilizzate congiuntamente dall'insieme di estensioni installate. Inoltre, a ogni estensione è garantita una quota di 30.000 regole statiche. Ad esempio, se un utente ha installato una sola estensione di filtro dei contenuti, l'estensione può utilizzare fino a 330.000 regole statiche della richiesta di rete dichiarativa. Per farti un'idea di quante regole sono, 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 della richiesta di rete dichiarativa possono essere organizzate in diversi insiemi di regole. Un'estensione può specificare fino a 100 insiemi di regole statiche e 50 di questi insiemi di regole possono essere attivati contemporaneamente.

Aggiungere dinamicamente regole di filtro in fase di runtime

Alcune regole non possono essere raggruppate con l'estensione. Le estensioni devono invece aggiungerle in fase di runtime. Queste regole sono chiamate "regole dinamiche".

Per le regole dinamiche della richiesta di rete dichiarativa, Chrome consente un massimo di 30.000 regole dinamiche sicure per estensione. La maggior parte delle regole sono considerate regole sicure: block, allow, allowAllRequests o upgradeScheme. Anche se una regola non è considerata sicura (ad esempio redirect), può comunque essere aggiunta dinamicamente, ma con un limite massimo inferiore di 5000, che rientra anche nel limite di 30.000 regole dinamiche. Per mettere le cose in prospettiva, il 98-99% delle regole nell'elenco di filtri EasyList sono regole sicure.

Le estensioni di filtro dei contenuti possono utilizzare rispettivamente regole statiche e dinamiche per raggruppare le regole di filtro note con la propria estensione e per aggiornare le estensioni con nuove regole di filtro dei contenuti dai propri server ogni volta che è necessario.

Adattare le regole in base alle richieste osservate

L'ecosistema pubblicitario è in costante evoluzione e i filtri dei contenuti devono essere aggiornati di conseguenza. Combinando chrome.webRequest e le regole dinamiche della richiesta di rete dichiarativa, è possibile analizzare le richieste di rete per rilevare potenziali violazioni della privacy e bloccarle in futuro.

L'approccio di base è il seguente:

  1. Analizza le richieste web utilizzando l'API chrome.webRequest e prova a identificare automaticamente le richieste che non soddisfano i tuoi requisiti di privacy, ad esempio utilizzando il machine learning.
  2. Crea una regola dinamica della richiesta di rete dichiarativa per ogni richiesta identificata nel passaggio 2, in modo che le richieste simili vengano bloccate in futuro.
  3. (Facoltativo) Invia la regola della richiesta di rete dichiarativa identificata al tuo server in modo che possa essere aggiunta come regola statica della richiesta di rete dichiarativa con il prossimo aggiornamento dell'estensione.

Il vantaggio di questo approccio è che l'analisi avviene in modo asincrono e non influisce negativamente sul rendimento del sito web.

Consentire 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 dei filtri nella tua estensione. Converti queste regole definite dall'utente in regole della richiesta di rete dichiarativa e aggiungile come regole dinamiche. Queste regole continueranno a essere disponibili per gli utenti perché 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 filtro delle richieste di rete è solo una parte importante del filtro dei contenuti. Un'altra parte importante è la rimozione dei contenuti indesiderati direttamente dalle pagine web. Ad esempio, più del 40% delle regole dell'elenco di filtri EasyList definisce il modo in cui i client devono nascondere gli elementi della pagina.

Questo risultato può essere ottenuto utilizzando gli script di contenuti. Gli script di 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 relativi agli elementi da nascondere non sono interessati, in quanto sono considerati dati di configurazione. Di conseguenza, le regole degli elementi possono essere aggiornate in fase di runtime ogni volta che è 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 filtro dei contenuti e della rete, ad esempio il filtro delle richieste in base ai contenuti. Per attivare questi casi d'uso, le estensioni installate dai 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 funzionalità è limitata alle estensioni installate dai 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 della richiesta di rete dichiarativa. Ad esempio, potresti voler ignorare gli URL di monitoraggio che reindirizzano l'utente alla destinazione prevista. Un approccio per gestire questa situazione è reindirizzare una richiesta di navigazione https://tracker.com?redirect=https%3A%2F%2Fexample.com a una pagina di estensione (che deve essere configurata come una risorsa accessibile al web), che eseguirà uno script per estrarre la destinazione di reindirizzamento e reindirizzare alla destinazione utilizzando window.location.replace("https://example.com"), aggirando il tracker dei link.