Rilevare i browser headless: Playwright, Puppeteer e oltre
Il nostro motore di Bot Detection identifica 15+ framework di automazione tramite incoerenze nei segnali, API mancanti e pattern comportamentali che i bot non possono falsificare.
I browser headless sono l'arma preferita per lo web scraping sofisticato, il credential stuffing (letteralmente «riempimento di credenziali») e le operazioni di frode. A differenza dei semplici client HTTP, i browser headless eseguono JavaScript, renderizzano le pagine e supportano le moderne API web — rendendosi molto più difficili da rilevare. Il nostro motore di Bot Detection usa più metodi di rilevamento indipendenti per identificare 15+ framework di automazione con falsi positivi prossimi allo zero.
L'evoluzione dell'automazione del browser
L'automazione del browser ha fatto molta strada dai semplici script curl. Strumenti moderni come Playwright, Puppeteer e Selenium WebDriver controllano motori di browser reali — Chromium, Firefox o WebKit — in modalità headless. Eseguono JavaScript, elaborano CSS, renderizzano elementi canvas e gestiscono query WebGL proprio come i browser headed. Questo li rende invisibili ai metodi di rilevamento che si limitano a controllare la capacità di eseguire JavaScript.
L'ultima generazione di strumenti si è spinta oltre. La modalità stealth di Playwright corregge molti dei segnali su cui si basa il rilevamento tradizionale dei bot. Puppeteer-extra-plugin-stealth modifica le proprietà del navigator, sovrascrive le stringhe del vendor WebGL e falsifica gli eventi di interazione dell'utente. Queste misure anti-rilevamento hanno creato una corsa agli armamenti tra gli operatori di bot e i sistemi di rilevamento.
Metodo di rilevamento 1: analisi del flag WebDriver
La proprietà navigator.webdriver è impostata a true quando un browser è controllato dall'automazione. Il rilevamento iniziale era semplice come controllare questa proprietà. Ma gli strumenti stealth moderni la eliminano o la sovrascrivono. Il nostro rilevamento va più a fondo — controlliamo non solo il valore della proprietà ma anche il suo descrittore, la sua presenza nella catena dei prototipi e se sono stati fatti tentativi di ridefinirla. Controlliamo anche proprietà correlate come le anomalie nella lunghezza di navigator.plugins che accompagnano le sovrascritture del WebDriver.
Metodo di rilevamento 2: artefatti del Chrome DevTools Protocol
Playwright e Puppeteer controllano i browser tramite il Chrome DevTools Protocol (CDP). Anche quando la modalità stealth è attiva, il CDP lascia artefatti nel runtime: variabili globali specifiche, funzioni getter modificate e descrittori di proprietà alterati sugli oggetti Window e Navigator. Sondiamo questi artefatti con tecniche resistenti alle semplici sovrascritture.
Metodo di rilevamento 3: fingerprinting del browser headless
Chrome headless ha un insieme di capacità diverso da Chrome headed. Gli mancano alcuni plugin del browser, ha caratteristiche di rendering diverse per alcune proprietà CSS e riporta valori diversi per alcuni risultati di MediaQuery. Manteniamo un database di caratteristiche note dei browser headless e confrontiamo i fingerprint in arrivo con esso.
Gli indicatori chiave dell'headless includono: chrome.runtime mancante (presente in Chrome headed ma assente in headless), array navigator.plugins di lunghezza zero, pattern specifici di user agent che sono stati associati alla modalità headless in versioni precedenti e differenze nel modo in cui Chrome headless gestisce i contesti di sicurezza degli iframe.
Metodo di rilevamento 4: analisi della lunghezza di eval
Motori JavaScript diversi hanno implementazioni diverse delle funzioni integrate, e queste implementazioni hanno rappresentazioni testuali diverse. Controllando la lunghezza di Function.prototype.toString.call(eval) e confrontandola con i valori noti per ciascun motore di browser, possiamo rilevare lo spoofing dell'ambiente — per esempio, un'istanza di Chrome headless che finge di essere Firefox.
Metodo di rilevamento 5: cross-validazione TLS
Come discusso nel nostro articolo sul fingerprinting TLS, il messaggio TLS Client Hello rivela il browser o la libreria HTTP effettiva che effettua la connessione. Quando uno script Playwright controlla Chrome, il fingerprint TLS corrisponde a Chrome — questo è previsto. Ma quando un bot personalizzato usa la libreria requests di Python o il net/http di Go, il fingerprint TLS rivela l'inganno indipendentemente dalla stringa user agent inviata.
Metodo di rilevamento 6: analisi temporale e comportamentale
Gli utenti reali mostrano una variazione naturale nei tempi di interazione. Muovono il mouse in curve, non in linee rette. Si fermano prima di cliccare. Scorrono a velocità variabili. Gli strumenti automatizzati, anche quelli che simulano il comportamento umano, producono pattern statisticamente distinguibili — timing troppo costante, percorsi del mouse perfettamente lineari e velocità di scroll innaturali.
Raccogliamo segnali comportamentali minimi durante il processo di fingerprinting stesso — il timing delle chiamate API, l'ordine di raccolta dei segnali e la reattività di certe API del browser. Questi segnali micro-comportamentali sono difficili da falsificare per gli strumenti di automazione perché dipendono dall'ambiente di esecuzione reale, non da proprietà sovrascrivibili.
Metodo di rilevamento 7: incoerenza di permessi e API
I browser reali hanno stati dei permessi e disponibilità delle API coerenti. Un browser che dichiara di supportare le notifiche ma non ha alcun costruttore Notification, o che riporta una risoluzione dello schermo specifica ma restituisce valori diversi da window.screen e dalle media query CSS, mostra incoerenze che indicano manomissione o emulazione.
Controlliamo decine di questi punti di cross-validazione, alla ricerca di contraddizioni che emergono quando gli strumenti di automazione sovrascrivono selettivamente alcuni segnali senza mantenere la coerenza tra tutte le API correlate.
Metodo di rilevamento 8: rilevamento di VM ed emulazione
Molte operazioni di bot girano dentro macchine virtuali o istanze cloud. Sebbene questo da solo non sia una prova di automazione, è un segnale forte quando combinato con altri indicatori. Rileviamo le VM tramite stringhe del renderer WebGL che contengono parole chiave associate alle VM (come «llvmpipe» o «SwiftShader»), caratteristiche hardware incoerenti con i dispositivi di consumo (esattamente 2 core CPU e 2 GB di memoria — valori predefiniti comuni delle VM) e range di IP noti dei provider cloud.
Il vantaggio multimetodo
Ogni metodo di rilevamento ha singolarmente dei limiti — un operatore di bot sofisticato potrebbe eludere qualsiasi singolo metodo. Ma eludere tutti i metodi contemporaneamente, mantenendo la coerenza della cross-validazione tra tutti, è proibitivamente costoso. Il costo di sviluppare e mantenere un bot che supera tutti i controlli supera il valore economico della maggior parte delle operazioni di bot.
Falsi positivi prossimi allo zero
Il nostro rilevamento opera su un modello a whitelist per i bot dei motori di ricerca (Googlebot, Bingbot, ecc.) verificati tramite reverse DNS, e su un modello multi-segnale per il resto del traffico. Richiediamo più segnali corroboranti prima di classificare il traffico come automatizzato. Questo approccio conservativo garantisce un tasso di falsi positivi sotto lo 0,1% — verificato su miliardi di eventi in produzione.