JavaScript Fingerprinting & Bot Detection: Come i Siti Web Ti Identificano
Punti Chiave
- JavaScript fingerprinting raccoglie oltre 50 caratteristiche del browser per creare un identificatore unico, più persistente dei cookie e più difficile da bloccare.
- I segnali di fingerprinting principali includono Canvas, WebGL, AudioContext, font, proprietà dello schermo e dati dell'API Navigator.
- I sistemi anti-bot combinano il fingerprinting JS con TLS fingerprinting (JA3/JA4) e analisi comportamentale per un rilevamento bot altamente accurato.
- I browser headless (Puppeteer, Playwright) e gli strumenti di automazione lasciano tracce rilevabili che il fingerprinting espone: API mancanti, output identici, anomalie di timing.
- Lo spoofing dei fingerprint è possibile ma sempre più difficile: i sistemi anti-bot usano controlli di coerenza che catturano valori spoofed non corrispondenti.
Indice dei Contenuti
- Cos'è il JavaScript Fingerprinting?
- Come Funziona il Browser Fingerprinting
- Segnali di Fingerprinting Principali
- TLS Fingerprinting (JA3/JA4)
- Come i Sistemi Anti-Bot Usano il Fingerprinting
- Rilevamento dei Browser Headless
- Spoofing dell'Impronta Digitale e Anti-Detection
- Strategie di Difesa per i Proprietari di Siti Web
- Implicazioni sulla Privacy
Ogni volta che visiti un sito web, il tuo browser rivela silenziosamente decine di caratteristiche uniche: la risoluzione dello schermo, il modello della GPU, i font installati, le particolarità dell'elaborazione audio, e il modo esatto in cui il browser renderizza gli elementi canvas invisibili. Combinate insieme, questi segnali creano un impronta digitale del browser altrettanto unica quanto un'impronta digitale umana.
Questa tecnologia alimenta i moderni sistemi di rilevamento dei bot, la prevenzione delle frodi e le difese anti-automazione. Capire come funziona è essenziale sia se stai difendendo il tuo sito web dai bot che se cerchi di comprendere perché certi sistemi di sicurezza sfidano il tuo traffico.
Che Cos'è il Fingerprinting JavaScript?
Il fingerprinting JavaScript è una tecnica che utilizza le API JavaScript lato browser per raccogliere caratteristiche del dispositivo e dell'ambiente, creando un identificatore univoco per ogni sessione di browser. A differenza dei cookie (che gli utenti possono eliminare) o degli indirizzi IP (che cambiano), le impronte digitali sono:
- Persistenti: Sopravvivono alla cancellazione dei cookie, alla navigazione privata e ai riavvi del browser
- Uniche: La combinazione di 50+ segnali crea impronte digitali uniche su milioni di browser
- Passive: La raccolta avviene invisibilmente senza interazione dell'utente
- Difficili da falsificare: Modificare un segnale spesso crea incoerenze rilevabili con gli altri
Come Funziona il Fingerprinting del Browser
Uno script di fingerprinting generalmente funziona in tre fasi:
- Raccolta: Le API JavaScript interrogano le proprietà del browser - oggetto navigator, proprietà dello schermo, rendering canvas, capacità WebGL, elaborazione AudioContext, ecc.
- Hashing: I valori raccolti vengono combinati e sottoposti a hash (solitamente SHA-256 o MurmurHash3) in una stringa di impronta digitale compatta
- Confronto: L'hash viene confrontato con le impronte digitali note, corrispondendo a un visitatore precedente, a uno strumento bot noto, o a un ambiente falsificato
Segnali di Fingerprinting Chiave
Canvas Fingerprinting
Il segnale di fingerprinting più potente. Un elemento <canvas> nascosto disegna testo, forme e gradienti. L'output pixel per pixel varia in base alla GPU, alla versione del driver, al motore di rendering dei font e all'implementazione dell'anti-aliasing. Due dispositivi diversi quasi mai producono output canvas identici.
WebGL Fingerprinting
WebGL espone informazioni sulla GPU (renderer, vendor) e produce output di rendering unico. L'estensione WEBGL_debug_renderer_info rivela il modello esatto della GPU. Combinato con i test di rendering WebGL, crea un'impronta digitale hardware forte.
AudioContext Fingerprinting
L'API Web Audio elabora i segnali audio diversamente su ogni dispositivo a causa delle differenze hardware e software. Generando un oscillatore e analizzando l'output, gli script di fingerprinting catturano caratteristiche uniche dell'elaborazione audio.
Font Fingerprinting
Diverse versioni del sistema operativo, language pack e applicazioni installate aggiungono collezioni di font uniche. Misurando la larghezza/altezza di rendering del testo in vari font, gli script determinano quali font sono installati, creando un'impronta digitale basata sui font.
Proprietà Navigator e Screen
| Segnale | Cosa Rivela | Entropia |
|---|---|---|
| navigator.userAgent | Versione browser, sistema operativo, tipo di dispositivo | Media (facilmente falsificabile) |
| navigator.language | Lingua/lingue preferite | Bassa-Media |
| navigator.hardwareConcurrency | Numero di core CPU | Bassa |
| navigator.deviceMemory | Quantità di RAM (approssimativa) | Bassa |
| screen.width/height | Risoluzione del display | Media |
| screen.colorDepth | Capacità di profondità colore | Bassa |
| navigator.platform | Stringa piattaforma del sistema operativo | Bassa (deprecata) |
| navigator.maxTouchPoints | Capacità touch | Bassa |
| Intl.DateTimeFormat().resolvedOptions().timeZone | Fuso orario | Media |
Segnali Aggiuntivi di Alto Valore
- WebRTC leak: Può rivelare indirizzi IP locali e pubblici anche attraverso VPN
- Battery API: Livello batteria e stato di carica (deprecata nella maggior parte dei browser per motivi di privacy)
- Stati dei permessi: Se notifiche, geolocalizzazione, autorizzazioni fotocamera sono state concesse o negate
- Client hints: User-Agent Client Hints di Chrome forniscono dati strutturati del dispositivo
- CSS media queries: Rileva preferenza dark mode, movimento ridotto, preferenze di contrasto
TLS Fingerprinting (JA3/JA4)
TLS fingerprinting opera a livello di connessione, prima che JavaScript venga eseguito:
JA3 Fingerprinting
Creato da Salesforce, JA3 genera un hash dei componenti del messaggio TLS Client Hello: versione SSL, cipher, estensioni, curve ellittiche e formati di punti EC. Ogni client HTTP (Chrome, Firefox, Python requests, Go http, curl) produce un hash JA3 univoco. Questo identifica il software client effettivo anche quando gli header user-agent sono falsificati.
JA4 Fingerprinting
Lo standard JA4 più recente migliora JA3 con un formato più leggibile e un tracciamento delle versioni migliore. Crea una stringa di fingerprint come "t13d1715h2_8daaf6152771_b0da82dd1658" che codifica la versione TLS, il numero di cipher, il numero di estensioni e i valori ALPN.
Come i Sistemi Anti-Bot Utilizzano il Fingerprinting
Le moderne soluzioni anti-bot come Cloudflare Bot Management, Akamai Bot Manager e DataDome combinano il fingerprinting con più livelli di rilevamento:
- Verifica del fingerprint TLS: Verificare che la connessione provenga da un vero browser, non da una libreria HTTP
- Esecuzione JavaScript: Eseguire script di raccolta fingerprint, i bot che non riescono a eseguire JS vengono immediatamente segnalati
- Validazione della coerenza: Verificare che il fingerprint JS corrisponda al fingerprint TLS (ad esempio, se JA3 dice Chrome ma canvas dice headless, segnalarlo)
- Confronto con bot noti: Confrontare il fingerprint con il database delle firme note degli strumenti bot
- Overlay comportamentale: Combinare il punteggio del fingerprint con il movimento del mouse, la tempistica dei clic e i pattern di scorrimento
Rilevamento dei Browser Headless
I browser headless (Chrome headless, Puppeteer, Playwright) lasciano segni caratteristici:
- navigator.webdriver: Impostato a
truenei browser automatizzati (può essere falsificato ma rilevato tramite verifiche del prototipo) - Oggetto chrome mancante:
window.chromeè assente o incompleto in Chrome headless - Numero di plugin: Chrome reale segnala i plugin; Chrome headless di solito segnala zero
- Mancata corrispondenza del vendor WebGL: Gli ambienti headless spesso segnalano "Google Inc. (Google SwiftShader)" - un renderer software
- Permesso di notifica: I browser headless non possono richiedere il permesso di notifica, rivelando se stessi attraverso il comportamento dell'API
- Iframe contentWindow: Chrome headless gestisce l'accesso agli iframe cross-origin diversamente
- Anomalie di timing: I browser automatizzati eseguono JavaScript a una velocità disumana o con un timing perfettamente coerente
Spoofing del Fingerprint e Anti-Detection
Diversi strumenti tentano di modificare i fingerprint del browser:
| Strumento | Approccio | Rischio di Rilevamento |
|---|---|---|
| GoLogin | Chromium personalizzato con profili fingerprint configurabili | Medio |
| Multilogin | Browser simulato con personalizzazione avanzata del fingerprint | Medio |
| Puppeteer Extra (Stealth) | Plugin che corregge gli artefatti rilevabili di Puppeteer | Medio-Alto |
| undetected-chromedriver | ChromeDriver modificato che evita i rilevamenti comuni | Medio-Alto |
| Estensioni browser | Canvas blocker, spoofing WebGL | Alto (aggiunge artefatti rilevabili) |
Strategie di Difesa per i Proprietari di Siti Web
Se stai proteggendo il tuo sito web dai bot, implementa il fingerprinting come parte di una difesa stratificata:
- Usa una soluzione gestita: Cloudflare, Akamai o DataDome gestiscono il fingerprinting su larga scala
- Combina con rate limiting: Il fingerprinting identifica i bot, il rate limiting ne limita l'impatto
- Aggiungi analisi comportamentale: Fingerprinting + tracciamento mouse + timing dei clic = rilevamento completo
- Distribuisci su infrastruttura protetta da DDoS: Il fingerprinting funziona a livello applicativo, hai bisogno anche della protezione DDoS a livello di rete
- Aggiorna regolarmente il rilevamento: Gli strumenti bot evolvono, il tuo rilevamento deve evolvere più velocemente
Implicazioni sulla Privacy
Il browser fingerprinting solleva preoccupazioni significative sulla privacy. I principali browser stanno limitando sempre più le capacità di fingerprinting:
- Firefox: Offre una modalità di resistenza al fingerprint che normalizza canvas, WebGL e altri output
- Safari: Limita la lettura del canvas e restringe l'enumerazione dei font
- Chrome: Riduzione dei dati user-agent tramite Client Hints e Privacy Sandbox
- GDPR/Normative sulla privacy: Il fingerprinting può costituire una raccolta di dati personali che richiede consenso nell'UE
Proteggi il Tuo Sito Web dagli Attacchi Bot
Il nostro team di sicurezza implementa rilevamento bot completo, fingerprinting, protezione DDoS e configurazione WAF per siti web e applicazioni sotto attacco.
Telegram: @unlednetwork -> Contattaci su WhatsApp ->
Commenti
Hai una domanda o esperienza diretta? Partecipa alla conversazione.
Exactly what we needed. Our team was debating the best strategy.
Good point. The combination of proper structure and testing makes all the difference for this strategy.