Perché uBlock Origin rinuncia a bloccare gli annunci Facebook

uBlock Origin non rimuove i filtri per Facebook, ma i contributor non inseguiranno più ogni modifica introdotta da Meta. Dietro la scelta ci sono DOM mutevoli, filtri cosmetici complessi e un enorme costo di manutenzione.

Si chiude l’ultimo capitolo di un braccio di ferro tecnico che dura da anni. I content blocker tradizionali nacquero in un web dove banner, script pubblicitari e tracker risultavano spesso abbastanza semplici da riconoscere attraverso URL, domini, classi CSS o strutture HTML relativamente stabili. Facebook rappresenta un esempio a parte: inserzioni e post normali convivono nello stesso feed, condividono buona parte della struttura della pagina e il codice che li distingue può cambiare rapidamente. Per un progetto open source mantenuto da un numero limitato di persone, inseguire ogni variazione finisce per assorbire una quantità di lavoro sproporzionata.

È quanto successo uBlock Origin (abbreviato, uBO) che alza bandiera bianca e dichiara di non essere più in grado di dedicare continuamente risorse alla battaglia contro gli annunci pubblicitari di Facebook. Il cambiamento riguarda soprattutto la manutenzione futura: quando Meta modificherà nuovamente il codice delle pagine per aggirare le regole correnti, i contributor di uBO non promettono più di intervenire ogni volta con una nuova contromossa.

Il progetto, nato nel 2014 per iniziativa di Raymond Hill, non si definisce soltanto un ad blocker: è unlo strumento per bloccare contenuti capace di lavorare con filtri di rete, regole cosmetiche, scriptlet e liste come EasyList ed EasyPrivacy.

Perché bloccare gli annunci di Facebook è diventato così difficile

Su molti siti un’inserzione arriva da un dominio pubblicitario riconoscibile. Il blocker intercetta la richiesta HTTP prima che la risorsa sia caricata dal browser dell’utente, sia desktop che mobile, e il lavoro finisce lì. Facebook può invece distribuire contenuto editoriale e pubblicitario attraverso la stessa infrastruttura. Bloccare un hostname o una famiglia di URL con eccessiva aggressività rischierebbe quindi di rompere il feed insieme agli annunci.

Entra allora in gioco il filtraggio cosmetico. Anziché impedire una connessione di rete, uBO può individuare nel DOM (Document Object Model), ovvero nella struttura della pagina, l’elemento che rappresenta una pubblicità e nasconderlo. La documentazione del progetto distingue i normali filtri CSS dai filtri procedurali, che possono usare operatori come :has(), :has-text(), :matches-attr() o :xpath() per riconoscere strutture più complesse.

In pratica, un filtro può cercare all’interno di un post un’etichetta che corrisponde a “Sponsored” o al suo equivalente nella lingua dell’utente (ad esempio l’italiano) e risalire poi al contenitore dell’intera inserzione. Funziona bene fino a quando la pagina conserva una struttura riconoscibile.

Facebook ha però reso questa identificazione progressivamente più ostica. Secondo le spiegazioni pubblicate nella discussione che ha originato il caso, il testo che consente a una persona di riconoscere un contenuto sponsorizzato può risultare frammentato tra più elementi HTML. Nel DOM possono comparire inoltre caratteri o nodi inutili per la visualizzazione, ma sufficienti a rendere meno affidabile una regola che cerchi una stringa precisa. Classi e attributi generati dinamicamente aggiungono un altro livello di instabilità.

Come fa Facebook a rendere instabili i filtri di uBlock Origin

Abbiamo già detto che su molti siti uBO può fermare un’inserzione già a livello di rete: riconosce una richiesta verso un dominio, un URL o un endpoint pubblicitario e la blocca prima che il browser scarichi la risorsa.

Con Facebook questa strada è molto meno efficace, perché contenuti normali e pubblicità transitano attraverso la stessa applicazione web e spesso condividono infrastrutture e strutture DOM molto simili.

Offuscamento del markup

Per difendersi da strumenti come uBO, gli sviluppatori Facebook si servono di meccanismi di offuscamento del markup HTML.

Cosa significa? Immaginiamo, in modo semplificato, che uBO possa inizialmente riconoscere una struttura simile a:

Sponsored

Una piattaforma può trasformarla concettualmente in qualcosa del tipo:

Sxyzponabcsored

nascondendo via CSS i frammenti xyz e abc. Visivamente non cambia nulla, ma una ricerca testuale elementare non vede più la stessa stringa. La situazione diventa ancora più difficile se i nodi cambiano ordine, le classi CSS sono rigenerate oppure versioni differenti del markup raggiungono utenti diversi. È esattamente il tipo di tecnica richiamato nella discussione dei contributor di uBO: nel caso di Facebook c’è testo spezzato, elementi-spazzatura non renderizzati e identificatori generati rendono fragile il bersaglio dei filtri.

Filtri cosmetici e costi elevati per le modifiche

Come accennato in precedenza, i procedural cosmetic filters di uBO possono cercare testo, attributi e relazioni tra nodi, risalire agli elementi parent e combinare più condizioni. Il limite non è quindi l’assenza di capacità tecnica; il problema è la stabilità. Più il filtro deve ricostruire semanticamente che cosa rappresenta una struttura HTML deliberatamente mutevole, più diventa costoso da sviluppare e più aumenta il rischio di falsi positivi.

Facebook non ha “battuto” uBlock Origin con una singola tecnica anti-adblock; ha reso estremamente costoso mantenere nel tempo un criterio affidabile per distinguere gli annunci dal normale contenuto del feed. Meta, inoltre, controlla il codice della pagina e può modificarlo continuamente, mentre i volontari di uBO devono ogni volta ricostruire la logica necessaria per riconoscere l’annuncio senza rompere il resto del sito.

La battaglia contro gli ad blocker ha anche un’altra faccia

Nella discussione su Reddit gli sviluppatori e i contributor di uBO arrivano a usare un titolo molto duro: “About disgusting Facebook devs“. Dal loro punto di vista è comprensibile la frustrazione per una piattaforma che modifica continuamente il markup e rende inutili filtri appena aggiornati.

Ma la questione può essere letta anche dall’altra parte: Facebook sta difendendo una delle proprie principali fonti di ricavo. In modo molto più aggressivo, certo, rispetto a come potrebbe fare qualsiasi normale editore che finanzia contenuti e servizi attraverso la pubblicità.

Il tema è delicato perché l’utente ha certamente il diritto di proteggere privacy, sicurezza e qualità della navigazione, soprattutto quando incontra pubblicità invasive, tracciamento eccessivo o pagine appesantite da script inutili. Va detto però che, quando un editore applica correttamente una CMP (Consent Management Platform), raccoglie o nega il consenso secondo le scelte dell’utente e impedisce il caricamento delle tecnologie pubblicitarie che richiedono consenso (prima di aver elaborato la risposta dell’utente stesso), resta comunque aperta una domanda molto concreta: come finanziare il servizio se anche la pubblicità consentita viene sistematicamente eliminata?

Gli editori devono affrontare costi vivi

I costi non spariscono insieme ai banner. Server, CDN, banda, licenze, sviluppo, redazione, dipendenti e collaboratori continuano a essere pagati; produrre e distribuire contenuti ha un costo reale anche quando l’accesso appare “gratuito”.

Per questo alcuni editori arrivano a descrivere l’uso indiscriminato degli ad blocker come una forma di appropriazione gratuita (e indebita) del contenuto. Il termine “furto” è giuridicamente e tecnicamente discutibile, ma fotografa un problema reale: se l’utente rifiuta sia il pagamento sia la pubblicità, qualcuno deve comunque sostenere il costo del servizio.

Il punto, quindi, non dovrebbe essere stabilire se ad blocker o piattaforme abbiano ragione in assoluto. Una pubblicità rispettosa, non invasiva e gestita secondo le preferenze espresse attraverso la CMP (il cookie banner potrebbe anche cambiare in Europa mentre noyb fa causa a un dizionario online…) rappresenta un compromesso ragionevole per molti servizi gratuiti.

Ti consigliamo anche

Link copiato negli appunti