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

Un fingerprint è una storia, non un elenco

I sistemi di rilevamento hanno smesso anni fa di valutare i segnali uno alla volta. Quello che controllano oggi è se i tuoi segnali concordano fra loro — e un profilo assemblato da un menu di tendine indipendenti quasi mai lo fa.

Dal valore alla relazione

Il primo fingerprinting era una lista della spesa. Raccogli canvas, WebGL, font, dimensioni dello schermo, fuso orario; fai l'hash del tutto; confronta l'hash. Se corrispondeva a un valore noto come cattivo, blocca.

Quell'approccio è morto da tempo, per una ragione semplice: era facile batterlo cambiando i valori. Al suo posto è arrivata la correlazione fra attributi — invece di chiedersi quanto vale ogni singolo dato, il sistema si chiede se quei valori potrebbero appartenere allo stesso computer.

Questo cambia enormemente la difficoltà. Falsificare un valore è banale. Falsificarne quaranta che implichino tutti la stessa macchina è un problema di modellazione, ed è il problema su cui quasi tutte le configurazioni antidetect falliscono, perché la loro interfaccia ti invita a scegliere ogni campo in modo indipendente da una tendina.

Non stai cercando di produrre un fingerprint insolito. Stai cercando di produrne uno che non si noti — la descrizione plausibile di un computer ordinario che dà il caso non sia il tuo.

Le contraddizioni che vengono controllate

Queste sono le correlazioni che compaiono più spesso nella logica di rilevamento reale. Nessuna è esotica; tutte sono economiche.

GPU contro piattaforma

La stringa del renderer WebGL smascherato nomina un chip reale e un percorso di driver reale. ANGLE (Apple, Apple M2, OpenGL 4.1) è un Mac. ANGLE (NVIDIA, NVIDIA GeForce RTX 4070 Direct3D11 vs_5_0 ps_5_0, D3D11) è Windows — Direct3D non esiste altrove. Uno user agent che dichiara macOS accanto a un renderer D3D11 non è un dispositivo raro; è un dispositivo impossibile.

GPU contro schermo

Una macchina con una GPU serie M e uno schermo 1366×768 a devicePixelRatio 1 non esiste — Apple non ha mai venduto quel pannello nel periodo in questione. Una grafica integrata di dieci anni fa abbinata a un display 3840×2160 è altrettanto improbabile. I fornitori di sistemi di rilevamento tengono tabelle di distribuzione proprio per queste coppie.

Font contro sistema operativo

Gli insiemi di font sono firme del sistema operativo. Segoe UI arriva con Windows. SF Pro e Helvetica Neue con macOS. Ubuntu e la famiglia Liberation con le distribuzioni Linux più diffuse. Un profilo "Windows" che non riesce a renderizzare Segoe UI ha fallito un controllo che costa al tracker una singola chiamata a measureText. La superficie dei font merita una trattazione a sé, e ce l'ha.

Fuso orario contro IP

L'errore più comune di tutti, e il meno tecnico. Intl.DateTimeFormat().resolvedOptions().timeZone restituisce quello che il browser crede di essere; l'IP dice da dove arriva la connessione. Un IP residenziale brasiliano con Europe/Rome è un'incoerenza che qualsiasi ingegnere alle prime armi segnalerebbe. Peggio ancora, il browser espone anche l'getTimezoneOffset() grezzo, quindi un profilo che falsifica il nome IANA ma non l'offset si contraddice da solo senza bisogno di alcun dato esterno.

Lingua contro tutto il resto

Ci sono tre superfici per la lingua e spesso ne vengono impostate solo due: l'header HTTP Accept-Language, navigator.languages in JavaScript e la locale che l'API Intl risolve. Abbiamo visto profili in produzione che annunciavano it-IT da JavaScript e en-US,en;q=0.9 nell'header contemporaneamente. È un errore di configurazione visibile in un log delle richieste.

Numeri dell'hardware contro classe di dispositivo

hardwareConcurrency e deviceMemory dovrebbero descrivere una macchina che qualcuno ha davvero comprato. deviceMemory è quantizzato dalla specifica a 0.25, 0.5, 1, 2, 4, 8 — un valore di 6 non è solo insolito, è fuori specifica. Sessantaquattro core logici abbinati a 4 GB di memoria dichiarata non descrivono nulla in commercio.

Tocco contro fattore di forma

maxTouchPoints > 0 su uno user agent desktop, senza un profilo di dispositivo con supporto al tocco, è un residuo comune della copia di un fingerprint mobile. Lo è anche uno user agent mobile con uno schermo 1920×1080 e un puntatore del mouse.

Tabella a due colonne con i valori dichiarati contro quelli che implicano, con due incoerenze evidenziate
Sei coppie, quattro delle quali concordano. Le due segnate con descrivono una macchina che non può esistere — e per individuarle non serve alcun dato esterno.

Il controllo sui due contesti

Oltre alla plausibilità a coppie c'è un test più severo, ed è quello che chiude le sessioni: fai la stessa domanda in due posti e confronta.

Il browser espone diversi contesti di esecuzione che dovrebbero descrivere tutti la stessa macchina — la finestra principale, un Web Worker, un iframe e un Service Worker. Un override a livello di pagina di solito raggiunge solo il primo. Gli script di rilevamento leggono hardwareConcurrency, deviceMemory, platform, userAgent e le stringhe WebGL da un worker e li confrontano con quelli della finestra.

Non esiste una spiegazione innocente per una discordanza. Non è un'euristica con un tasso di falsi positivi; è una prova. È l'argomento più forte a favore del gestire i fingerprint nel motore invece che in uno script iniettato, ed è trattato più a fondo nell'articolo su CDP.

Dove sbagliano i generatori di profili casuali

Gli strumenti che generano un "fingerprint casuale" di solito campionano ogni campo in modo indipendente da un elenco di valori plausibili. Ogni singolo campo sembra a posto. La combinazione è spesso assurda.

Il campionamento indipendente produce una GPU Mac con un set di font Windows, uno schermo 4K su grafica integrata del 2014, oppure uno user agent Chrome 147 con un elenco di brand userAgentData preso da Chrome 131. Ogni valore ha superato la propria validazione; la macchina descritta non esiste.

La soluzione è campionare la macchina, non i campi. Parti da un archetipo di dispositivo reale — diciamo un ThinkPad del 2023 con grafica Iris Xe, 16 GB di RAM, un pannello 1920×1080 e un set di font di Windows 11 — e ricava ogni valore da lì. Varia all'interno dell'intervallo realistico dell'archetipo, mai fra archetipi diversi.

Un test utile per qualsiasi strumento: crea dieci profili e leggi il loro renderer WebGL e la loro piattaforma. Se riesci a ottenere una GPU Apple accanto a Win32, il generatore sta campionando i campi.

Ordinario batte unico

Un ultimo punto che va contro l'istinto. L'unicità non è l'obiettivo. Un fingerprint che non corrisponde a nulla di registrato è a sua volta un segnale — significa che il tracker non ha mai visto questa configurazione, il che non è l'aspetto di un utente ordinario.

Il posto comodo è il centro della distribuzione. Uno schermo 1920×1080, 8 o 16 GB di RAM, 8 core logici, una GPU di fascia media, il set di font predefinito del sistema operativo e un fuso orario che corrisponde all'IP di uscita. Noioso in ogni dimensione, e condiviso con milioni di altre macchine.

Resisti alla tentazione di scegliere hardware d'effetto. Una workstation a 32 core con 128 GB di RAM è memorabile, e memorabile è l'opposto di quel che vuoi.

Una checklist da eseguire

Prima di mettere al lavoro un profilo, verifica questi punti nell'ordine. Un solo fallimento vale la pena di essere corretto prima di andare avanti:

  1. Geolocalizzazione dell'IP, timeZone e getTimezoneOffset() puntano tutti allo stesso posto.
  2. Accept-Language, navigator.languages e la locale risolta da Intl concordano.
  3. Il renderer WebGL nomina un chip che viene venduto con la piattaforma indicata nello user agent.
  4. L'elenco dei font è quello predefinito per quella versione di sistema operativo, più niente di esotico.
  5. Risoluzione dello schermo e devicePixelRatio descrivono un pannello venduto con quella classe di GPU.
  6. deviceMemory è un valore ammesso e hardwareConcurrency è plausibile al suo fianco.
  7. Un Web Worker restituisce gli stessi valori della finestra.
  8. L'hash del canvas è stabile fra i render e fra le sessioni — vedi perché è importante.
  9. WebRTC non riporta un IP diverso da quello del proxy. Questo perde in silenzio.
  10. I brand di navigator.userAgentData corrispondono alla versione maggiore di Chrome nella stringa dello user agent.

CreepJS farà gran parte di questo lavoro al posto tuo e ti dirà chiaramente quali coppie considera incoerenti. Eseguilo una volta per modello di profilo, non una volta per profilo: se il modello è solido, lo saranno anche i profili che ne derivano.

Profili costruiti da archetipi di dispositivi reali

P8 genera ogni fingerprint a partire da un profilo hardware coerente, così GPU, font, schermo e piattaforma descrivono una sola macchina invece di quattro.

Inizia gratis
Tutti gli articoli Prossimo: il rumore sul canvas è un fingerprint a sua volta