Browser fingerprinting: cosa leggono davvero i siti

Un giro campo per campo dei valori che un sito raccoglie, da canvas e WebGL ad audio, font, schermo e fuso orario, e perché un'identità coerente batte una casuale.
Il browser fingerprinting è la pratica di identificare un browser dai valori che riporta anziché da ciò che memorizza. Non serve alcun cookie. Il browser risponde semplicemente alle domande che qualsiasi pagina web può porre, e le risposte insieme sono abbastanza distintive da essere riconosciute di nuovo.
I valori raccolti
La maggior parte degli script di fingerprinting legge dalle stesse poche superfici.
Quelli più evidenti
- Lo user agent contiene nome, versione e piattaforma del browser, e viene inviato a ogni richiesta.
- Lo schermo riporta larghezza, altezza, profondità di colore, rapporto di pixel e area di lavoro disponibile.
- Lingua e fuso orario riguardano la locale che il browser dichiara e lo scostamento che calcola.
- I suggerimenti hardware indicano il numero di processori dichiarato e, su alcuni browser, un valore approssimativo di memoria.
Quelli di rendering
Sono i valori a cui si pensa quando si parla di fingerprinting, perché sono indiretti. Una pagina chiede al browser di disegnare qualcosa e poi rilegge esattamente ciò che è stato disegnato.
- Il lavoro su canvas disegna testo e forme su un canvas fuori schermo e ne calcola l'hash. Il risultato varia con lo stack grafico, i font e l'anti-aliasing.
- WebGL espone le stringhe di produttore e renderer della scheda grafica, più un hash di una scena renderizzata.
- L'audio fa passare un oscillatore attraverso il grafo di elaborazione audio e ne calcola l'hash dell'output. Il comportamento in virgola mobile differisce leggermente tra gli stack.
- Il rilevamento dei font misura il testo in font candidati e deduce quali siano installati da quali misure differiscono.
Quelli di rete
- L'indirizzo da cui arriva la richiesta, e ciò che un database di geolocalizzazione dice a riguardo.
- WebRTC, che può rivelare indirizzi che la connessione altrimenti non esporrebbe.
- L'ordine e il contenuto dei campi dell'handshake TLS e HTTP, che variano a seconda del client.
Perché rendere casuale ogni campo è l'istinto sbagliato
La difesa intuitiva è cambiare tutto a ogni visita. Si ritorce contro, per due ragioni.
La prima è la contraddizione. I campi casuali non si conoscono tra loro. Uno user agent che dichiara Windows accanto a una stringa di renderer WebGL che esiste solo su hardware Apple è un segnale più forte di quanto lo sarebbe stato ciascun valore da solo. Le macchine reali sono internamente coerenti; solo quelle sintetiche si contraddicono.
La seconda è l'instabilità. Un account che riporta un dispositivo diverso a ogni visita descrive qualcosa che nessuna persona reale possiede. La coerenza nel tempo è ciò che caratterizza un utente normale.
Cosa copre l'identità di un profilo
| Superficie | Gestita da |
|---|---|
| User agent e piattaforma | Generati insieme, così la piattaforma dichiarata coincide con i valori circostanti |
| Schermo e rapporto di pixel | Fissati per profilo, scelti tra dimensioni che i display reali riportano davvero |
| Fuso orario e locale | Impostati per profilo e confrontati con il percorso di rete che usa |
| Canvas, WebGL e audio | Con un trattamento stabile per profilo, identico a ogni apertura |
| Font | Un insieme per profilo coerente con la piattaforma dichiarata dal profilo |
| WebRTC | Vincolato in modo da non contraddire il percorso di rete del profilo |
Verificare il proprio lavoro
Apri un profilo e visita una pagina di test del fingerprinting. Diverse pubblicano gratuitamente i valori che leggono. Le due cose che vale la pena controllare non sono quelle che potresti aspettarti:
- I valori concordano tra loro? Piattaforma, font, stringhe grafiche e fuso orario dovrebbero descrivere una sola macchina plausibile.
- Sono uguali all'ultima volta? Chiudi il profilo, riaprilo, ricarica il test. Un profilo i cui valori cambiano tra le aperture non è stabile, e la stabilità è la proprietà che conta.
Un punteggio di rarità su una pagina di test è il numero meno utile. Ti misura rispetto ai visitatori di quella pagina, che sono in stragrande maggioranza persone che testano browser antidetect.


