AntiDetect
Funzionalità Tecnologia Prezzi Per chi è
Docs Blog FAQ
Lingua
EnglishItalianoDeutschEspañolРусский
Scarica

Fingerprinting del browser spiegato: come i siti ti identificano senza cookie

Canvas, WebGL, AudioContext, font, risoluzione dello schermo -- come decine di segnali si combinano in un fingerprint unico. Cosa cercano i sistemi di rilevamento e perché quasi tutti gli strumenti "privacy" non affrontano il problema.

In questo articolo
  1. Cos'è il fingerprinting del browser?
  2. I segnali del fingerprint
  3. Come si calcola un fingerprint
  4. Entropia: perché alcuni segnali contano più di altri
  5. Fingerprinting attivo e passivo
  6. Come i sistemi di rilevamento usano i fingerprint
  7. Perché i normali strumenti per la privacy non funzionano
  8. Come i browser antidetect affrontano il fingerprinting
  9. La corsa agli armamenti

Cos'è il fingerprinting del browser?

Il fingerprinting del browser è una tecnica di tracciamento che identifica gli utenti raccogliendo informazioni sulla configurazione del browser e del dispositivo. A differenza dei cookie, che stanno sul tuo dispositivo e si possono cancellare, un fingerprint è calcolato a partire da dati che il tuo browser espone per impostazione predefinita -- informazioni che esistono perché i siti ne hanno bisogno per funzionare correttamente.

Il tuo browser rivela il sistema operativo, la risoluzione dello schermo, il fuso orario, la lingua, i font installati, il modello di GPU, le caratteristiche di elaborazione audio e molto altro. Presi singolarmente, nessuno di questi dati ti identifica. Combinati, creano una firma che con probabilità schiacciante è unica per quel preciso browser su quel preciso dispositivo.

Uno studio del 2020 dei ricercatori di INRIA ha rilevato che oltre il 94% dei browser con JavaScript attivo aveva un fingerprint unico. Da allora la situazione è diventata solo più precisa, perché le aziende di rilevamento hanno aggiunto nuovi segnali e migliorato i loro algoritmi di hashing.

I segnali del fingerprint

I segnali che contribuiscono al fingerprint di un browser sono oltre 50. Ecco i più importanti:

Entropia alta
Fingerprint del canvas

Il browser disegna testo e forme invisibili su un elemento canvas HTML5, poi rilegge i dati dei pixel. GPU, driver, motori di rendering dei font e impostazioni di anti-aliasing del sistema operativo diversi producono un output leggermente diverso -- abbastanza da generare un hash quasi unico.

Entropia alta
Fingerprint WebGL

Simile al canvas, ma usa il rendering 3D. Il browser renderizza una scena 3D e l'output varia in base all'hardware della GPU, alla versione del driver e all'implementazione di OpenGL. Espone anche le stringhe di vendor e renderer della GPU (ad esempio "ANGLE (NVIDIA GeForce RTX 3080)").

Entropia alta
Fingerprint di AudioContext

Il browser genera un segnale audio con la Web Audio API e misura come viene elaborato. Hardware e driver audio diversi producono output in virgola mobile diversi, creando un hash audio unico senza mai riprodurre alcun suono.

Entropia alta
Enumerazione dei font

Il browser misura larghezza e altezza del testo renderizzato in vari font. Controllando quali font sono installati (e come vengono renderizzati), uno script di fingerprinting può identificare il tuo specifico insieme di font installati -- che varia parecchio da macchina a macchina.

Entropia media
Metriche di schermo e finestra

Risoluzione dello schermo, spazio disponibile (al netto della barra delle applicazioni), profondità di colore, device pixel ratio, dimensioni interne della finestra e se la finestra è massimizzata. La combinazione di questi valori restringe parecchio l'identificazione.

Entropia media
Proprietà di navigator

Stringa dello user agent, piattaforma, lingua o lingue, numero di core della CPU (hardwareConcurrency), memoria del dispositivo, punti di tocco massimi, tipo di connessione e se è attivo "Do Not Track". Ognuna aggiunge qualche bit di entropia.

Oltre a questi segnali principali, gli script di fingerprinting raccolgono anche:

Quattro livelli che mostrano quali segnali di fingerprinting vengono da hardware, sistema operativo, browser e rete
Quattro sorgenti, un fingerprint. Lo strato in basso è quello che nessuna impostazione del browser raggiunge.

Come si calcola un fingerprint

Uno script di fingerprinting raccoglie tutti questi valori, li serializza in una stringa o in un oggetto strutturato e li passa attraverso una funzione di hash (di solito MurmurHash3 o SHA-256) per produrre un identificatore compatto. Ecco un esempio semplificato:

const signals = {
  canvas: getCanvasHash(),
  webgl: getWebGLHash(),
  audio: getAudioHash(),
  fonts: getInstalledFonts(),
  screen: `${screen.width}x${screen.height}x${screen.colorDepth}`,
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
  language: navigator.language,
  cores: navigator.hardwareConcurrency,
  memory: navigator.deviceMemory,
  platform: navigator.platform,
  userAgent: navigator.userAgent,
  touchPoints: navigator.maxTouchPoints,
  // ... 30+ more signals
};

const fingerprint = murmurhash3(JSON.stringify(signals));

L'hash che ne risulta è una stringa breve -- qualcosa come a3f8c91b -- che funge da ID unico del tuo browser. Questo hash viene conservato lato server e confrontato con le visite successive.

Entropia: perché alcuni segnali contano più di altri

Non tutti i segnali contribuiscono allo stesso modo all'unicità. Il concetto di entropia misura quanta informazione identificativa porta un segnale. Più entropia significa più bit di informazione, cioè un segnale che restringe di più la tua identità.

SegnaleEntropia approssimativaImpatto sull'unicità
Hash del canvas~14 bitMolto alto -- differenze di GPU e rendering
Renderer WebGL + hash~12 bitMolto alto -- identifica il modello di GPU
Font installati~11 bitMolto alto -- varia da macchina a macchina
Hash di AudioContext~10 bitAlto -- dipende dall'hardware
Risoluzione dello schermo~5 bitMedio -- molte risoluzioni sono comuni
Fuso orario~4 bitMedio -- circa 24 grandi gruppi di fusi
User agent~6 bitMedio -- la versione del browser aggiunge dettaglio
Lingua~3 bitBasso -- insieme limitato di lingue comuni
Piattaforma~2 bitBasso -- Win/Mac/Linux/mobile
Profondità di colore~1 bitMolto basso -- quasi tutti sono a 24 bit

L'entropia totale di tutti i segnali in uno script di fingerprinting moderno supera in genere i 40 bit. Con 40 bit di entropia ci sono oltre mille miliardi di combinazioni possibili -- più che sufficienti a identificare in modo univoco ogni browser sulla Terra.

Fingerprinting attivo e passivo

Le tecniche di fingerprinting si dividono in due categorie:

Il fingerprinting passivo usa i dati che il browser invia automaticamente a ogni richiesta HTTP: l'header dello user agent, le lingue accettate, le codifiche accettate e le caratteristiche della connessione. Il server non deve eseguire alcun JavaScript. È più discreto ma offre meno segnali.

Il fingerprinting attivo esegue JavaScript nella pagina per sondare il browser: renderizza immagini su canvas, interroga WebGL, misura l'output audio, enumera i font e verifica comportamenti specifici delle API. È molto più potente ed è su questo che si basa la maggior parte dei sistemi di rilevamento.

In pratica i sistemi di rilevamento usano entrambi. Il fingerprint passivo dagli header HTTP viene calcolato lato server, mentre quello attivo si calcola lato client via JavaScript e viene rimandato indietro come segnale. I due vengono combinati e controllati a vicenda per verificarne la coerenza.

Come i sistemi di rilevamento usano i fingerprint

I fingerprint del browser non vengono usati da soli. Le piattaforme di rilevamento moderne li combinano con altri segnali per costruire un punteggio di rischio:

Il fingerprint di per sé è solo uno degli input. Quel che conta davvero è la coerenza e la plausibilità dell'intero pacchetto di segnali. Un fingerprint perfetto con un IP da datacenter e movimenti del mouse robotici viene comunque segnalato.

Perché i normali strumenti per la privacy non funzionano

Gli utenti spesso si affidano a strumenti per la privacy che contro il fingerprinting non servono:

Incognito / navigazione privata

La modalità in incognito cancella cookie e cronologia alla chiusura della finestra. Al fingerprint non fa assolutamente niente. L'hash del canvas, l'output WebGL, i font, la risoluzione dello schermo e ogni altro segnale restano identici alla tua sessione normale. Stesso fingerprint, solo senza cookie.

VPN / Tor

Le VPN cambiano il tuo indirizzo IP. Tor standardizza anche alcune proprietà del browser tramite il Tor Browser. Le VPN normali, però, non modificano affatto il fingerprint del browser -- l'hash del canvas e il renderer WebGL restano gli stessi. E il Tor Browser, pur resistendo al fingerprinting, è riconoscibile proprio in quanto Tor Browser, cosa che molte piattaforme bloccano a priori.

Estensioni del browser

Estensioni come Canvas Blocker o i componenti aggiuntivi per lo spoofing del fingerprint provano a intercettare le API di fingerprinting. Il problema è triplice: (1) le estensioni si rilevano dagli effetti collaterali sul DOM e sul comportamento delle API, (2) non riescono a falsificare in modo coerente i segnali che nascono sotto il livello JavaScript e (3) la presenza di specifiche estensioni per la privacy è a sua volta un segnale di fingerprint -- pochissimi utenti reali le hanno installate.

Più profili del browser (Chrome/Firefox)

Chrome e Firefox supportano più profili utente, ognuno con cookie e cronologia separati. Ma condividono tutti lo stesso fingerprint, perché sono lo stesso browser sullo stesso hardware. Profili diversi, stesso hash del canvas, stesso WebGL, stessi font. I sistemi di rilevamento li collegano all'istante.

Come i browser antidetect affrontano il fingerprinting

I browser antidetect sono progettati proprio per affrontare il fingerprinting alla radice. Ecco cosa fa di diverso uno costruito bene:

Configurazione del fingerprint per ogni profilo. Ogni profilo browser riceve una configurazione completa e propria: un seed specifico per il rumore del canvas, un renderer WebGL falsificato che corrisponde a una GPU reale, un insieme di font coerente con il sistema operativo scelto, metriche dello schermo che corrispondono a un dispositivo reale e così via. Il punto chiave è che tutti questi valori siano coerenti fra loro.

Modifica a livello di engine. In un browser antidetect costruito come si deve, le modifiche al fingerprint avvengono dentro il motore del browser -- a livello di C++ in Chromium. Quando un sito chiama canvas.toDataURL(), è il motore stesso a restituire dati dei pixel modificati. Non c'è nessun override JavaScript da rilevare, perché la modifica avviene prima che i dati arrivino al livello JavaScript.

Iniezione di rumore con seed stabili. Invece di restituire valori casuali (che cambierebbero a ogni caricamento di pagina facendo scattare i controlli), i buoni browser antidetect usano un rumore deterministico basato su un seed per profilo. Lo stesso test del canvas produce sempre lo stesso hash all'interno di un profilo, ma profili diversi producono hash diversi. È così che si comportano i browser veri -- il tuo fingerprint è stabile fra una sessione e l'altra.

Validazione della plausibilità hardware. Prima di generare un profilo, il sistema verifica che la combinazione di segnali sia plausibile. Un profilo che dichiara Windows 10 con una GPU Apple M2 sarebbe immediatamente sospetto. Il generatore di fingerprint fa in modo che sistema operativo, GPU, font, user agent e gli altri segnali formino un'identità coerente.

L'obiettivo non è ottenere un browser che sembri "anonimo". È ottenere un browser che sembri una persona qualunque su un computer qualunque -- solo una persona qualunque diversa per ogni profilo.

La corsa agli armamenti

Il fingerprinting del browser è una corsa agli armamenti fra le aziende di rilevamento e gli strumenti antidetect, e sta accelerando.

I sistemi di rilevamento diventano più sofisticati. Aggiungono nuovi segnali (come le misurazioni di getClientRects() e il comportamento della WebCodecs API), incrociano la biometria comportamentale con i dati del fingerprint e usano il machine learning per individuare configurazioni "impossibili" o "improbabili" che nessun browser reale produrrebbe.

Allo stesso tempo i browser antidetect rispondono modificando strati più profondi del motore, migliorando i controlli di coerenza del fingerprint e costruendo database più completi di configurazioni hardware reali da usare come modelli.

Due cose sono chiare: il fingerprinting non sparirà (è troppo utile per la prevenzione delle frodi e per il targeting pubblicitario), e strumenti passivi come VPN ed estensioni non bastano ad affrontarlo. Se nel tuo lavoro conta l'isolamento a livello di fingerprint, ti serve uno strumento costruito apposta.

Costruito a livello di engine

Il motore Chromium personalizzato di P8 gestisce la generazione del fingerprint a livello di codice sorgente -- non con patch in JS. Ogni profilo produce un fingerprint coerente e plausibile.

Inizia gratis
Tutti gli articoli Precedente: cos'è un browser antidetect?