[Golem] Due parole sulle modalità antitracciamento di Firefox

giomba@linux.it giomba@linux.it
Mer 24 Maggio 2023 18:23:32 CEST


Ieri sera, in Officina, è nata una piccola discussione su "comportamenti 
strani e inusuali dei siti web", che si è conclusa con la risoluzione 
del problema puntuale che era stato riscontrato, ma che, a mio avviso, 
necessita di maggiore approfondimento.
Questa mail è il risultato del discorso lasciato a metà ieri sera.

Per capire il motivo dietro a certi comportamenti strani, è prima 
necessario che descriva approssimativamente come funziona il web.
Quello che segue è un riassunto di come funziona il web fatto da uno che 
non lo sa, quindi, per qualunque imprecisione, invito gli esperti a 
intervenire. So già che ci sono imprecisioni, che magari qualcuno mi 
potrebbe chiarire anche a me :-)

Il web è un servizio di tipo client-server, dove il client (cioè il 
browser dell'utente, per esempio Firefox), richiede delle risorse al 
server (cioè chiede le cosiddette "pagine web" a un altro computer, il 
server, che sta lì sempre acceso, pronto a rispondere).

Quando il client chiede una pagina, la conversazione tra client e server 
si svolge essenzialmente in questo modo:

client: "ciao server, mi mandi la pagina X?"
server: "ok tieni la pagina X"

Se, successivamente, il client dovesse richiedere un'altra pagina allo 
stesso server, il server non avrebbe nessuna idea che si tratta dello 
stesso client, perché il protocollo di comunicazione non prevede nessuna 
informazione sullo stato pregresso.

Ora si immagini che ci si debba registrare su un sito web e si debbano 
performare delle operazioni in modo autenticato: secondo quando 
descritto sopra, sarebbe necessario autenticarsi per ogni pagina che si 
visita su quel sito, cioè si dovrebbe continuamente inserire la propria 
password ad ogni cambio di pagina.

Questo però non avviene, perché sono stati inventati i famigerati cookie.

Cos'è un cookie? Un cookie non è altro che un piccolo identificatore che 
il server manda al client la prima volta che questo si collega, e che 
poi il client gli rimanda indietro ogni volta che si collega di nuovo.
Guardando il cookie, il server è in grado di capire se sta servendo 
delle pagine web ad un client che ha già incontrato.

Dunque la conversazione con i cookie si svolge così:

client: "ciao server, mi mandi la pagina X? non ho cookie"
server: "ok tieni la pagina X; il tuo cookie è 1234"

In seguito, il client che si ricollega, dirà:

client: "ciao server, mi mandi la pagina X? Io sono 1234"
server: "ok tieni la pagina Y; il tuo cookie è sempre 1234"

In questo modo, il server sa che sta parlando con lo stesso client di 
prima, e può evitare di chiedergli di nuovo la password.

Da questo esempio si evince già una cosa: che tutti gli avvisi 
sull'accettazione dei cookie che siamo costretti a cliccare quando 
navighiamo, sono fuffa, perché tutta la responsabilità dell'utilizzo dei 
cookie è del client, e non del server.
Il client può benissimo accettare tutti i cookie che vuole, basta che 
poi non li rimandi indietro al server, e quest'ultimo non avrà "nessun" 
modo di tracciarlo.

Detto questo, continuiamo il percorso sul funzionamento del web.
Le pagine web sono oggetti complessi costituiti da numerosi elementi: il 
testo, lo stile di visualizzazione, le immagini, eccetera.
Ognuno di questi elementi necessita di essere richiesto separatamente al 
server: prima la pagina col testo, poi tutti gli elementi accessori.
Ne consegue che la conversazione per ricevere una pagina web complessa 
da un server, sarà qualcosa di più lungo, tipo:

client: "ciao server, mi mandi la pagina X?"
server: "ok tieni la pagina X"
Il client visualizza la pagina, e scopre che c'è allegato uno stile di 
visualizzazione, chiamiamolo S, dunque lo chiede al server.
client: "ciao server, mi mandi lo stile S?"
server "ok tieni lo stile S"

Solo a questo punto, il client è in grado di comporre e visualizzare 
correttamente la pagina web.

Una pagina web moderna si compone di numerosi elementi.
Per esempio, quando si accede alla home page del GOLEM, si avviano circa 
40 richieste per 40 file diversi.

Ora: non è necessario che tutti questi elementi risiedano sullo stesso 
server. Per esempio, il testo di una pagina potrebbe risiedere su un 
server, mentre le immagini e i caratteri tipografici su un altro.

Questo può avvenire per numerose ragioni, per esempio perché il server 
per servire le immagini è più vicino all'utente, per migliorare le 
prestazioni, ... ogni sito web sceglie la sua strategia, in base a 
decisioni tecniche e non.

Alcuni noti giganti dell'informatica forniscono insiemi di 
"blocchettini" per comporre le pagine web in grande quantità: per 
esempio script per velocizzare lo sviluppo, o caratteri tipografici.
Il vantaggio di raccogliere questi file su un server solo e noto, fa sì 
che, durante la navigazione, se il client deve recuperare più volte lo 
stesso file, possa accorgersi che si tratta sempre dello stesso file, ed 
eviti di scaricarlo più volte, velocizzando la navigazione.
(Anche e soprattutto quando più siti diversi fanno uso dello stesso file 
condiviso)

Alcuni di questi servizi sfruttano la loro centralità per tracciare 
l'utente: per esempio, quando si naviga su siti diversi A e B, ma che 
utilizzano lo stesso carattere tipografico, anche se il client accede a 
due server diversi A e B per il contenuto testuale, poi va sempre a 
recuperare il carattere tipografico dallo stesso server terzo.
In questo modo, il server che fornisce i caratteri tipografici, è in 
grado di correlare il fatto che il client ha visitato i due siti A e B.

Per inferire questa informazione, il server tracciante può utilizzare i 
cookie di cui sopra, che il client gli rimanda indietro.
(E anche altri meccanismi di cui non so abbastanza, per esempio, mi 
viene in mente il fingerprinting, e altre diavolerie che non conosco, e 
per cui servirebbe almeno un programmatore web).

Il server tracciante, non vedendo mai i cookie provenire da un client, 
può però insospettirsi, e capire che il client sta utilizzando qualche 
meccanismo di protezione dalla tracciatura, perché essenzialmente gli 
appare spesso, e sempre anonimo.
A questo punto, dunque, per "invitarlo gentilmente" a riabilitare la 
tracciatura, semplicemente smette di fornirgli i contenuti che sta 
richiedendo, così da causargli un disservizio.

Il client dunque si può ritrovare con pagine web parzialmente 
funzionanti, in cui mancano immagini, in cui manca lo stile di 
visualizzazione, in cui manca il carattere tipografico carino, e così via.

Utilizzare una delle modalità "Restrittive" fornite da Firefox contro il 
tracciamento, se da una parte migliora l'esperienza utente dal punto di 
vista della privacy, dall'altra la può peggiorare dal punto di vista 
della fruibilità.

In questo periodo storico, il mondo intero va nella direzione della 
tracciatura, perciò Firefox fa quel che può, ma non è infallibile, e ciò 
che può funzionare oggi non è detto che funzioni domani.
Magari domani qualche sviluppatore del server tracciante affina la 
tecnica per identificare i meccanismi antitracciatura di Firefox, e di 
colpo causa nuovi disservizi agli utenti di numerosi siti web diversi; 
poi Firefox si aggiornerà e riuscirà di nuovo ad aggirare queste 
restrizioni, finché qualcuno non affinerà di nuovo l'algoritmo, e così 
via: è un gioco di guardie e ladri.

Del resto, non è detto che ciò che è giusto vada anche di moda.

Su Firefox poi possono essere installate numerose estensioni mirate a 
mitigare numerose questioni di tracciamento, alcune di queste sono 
indicate qua:
https://wiki.golem.linux.it/Igiene_Informatica

(ennesima pagina che avrebbe bisogno di essere aggiornata per gli 
strumenti, ma che rimane comunque valida per i metodi)

Sperando di aver chiarito la discussione avuta ieri sera,
un saluto.

--
giomba



Maggiori informazioni sulla lista golem