Come fanno i test di battitura a scoprire chi bara? Come controlliamo il nostro

I test di battitura scoprono chi bara controllando il registro dei tasti dietro ogni punteggio. Il nostro ricalcola ogni risultato dal suo registro dei tasti, verifica un hash, esamina la struttura e i tempi del registro, e tiene fuori dalle classifiche pubbliche qualsiasi risultato a tempo sopra i 130 WPM che abbia anche un ritmo insolito, finché non superi un nuovo test. I controlli sui tempi fermano i bot fatti male; il nuovo test costringe quelli fatti bene a rifare tutto da capo.

Il primo bot che ha superato i nostri controlli sui tempi era il nostro.

Lo strumento dei nostri test end-to-end premeva i tasti a un intervallo fisso di 40 ms, perché è quello che fa uno script di test. Il server ricalcolava il risultato, confermava l'hash e classificava la prova come sospetta: varianza zero tra le battute, rollover zero, tempi di pressione identici. Abbiamo dovuto aggiungere un'oscillazione casuale per ogni parola e qualche pausa "di riflessione" da 80 a 300 ms prima che la nostra stessa suite riuscisse a pubblicare un risultato dall'aria umana. L'opzione è ancora nel codice, con l'etichetta humanLike.

I controlli funzionano contro tutto ciò che non ci prova, e tutto ciò che ci prova può superarli, quindi il progetto mette il peso vero su un nuovo test.

Primo passo: ricalcolare tutto

Il tuo browser non ci manda un WPM. Ci manda il registro dei tasti (ogni evento keydown, keyup, input e composition, con il tempo preso dall'orologio monotono performance.now()), le metriche che ha calcolato e un hash SHA-256 del risultato in forma canonica.

Il server esegue lo stesso codice delle metriche sul registro e confronta. Se un numero differisce di più di 0,01, il risultato viene rifiutato come metrics_mismatch. Se l'hash non corrisponde, viene rifiutato come hash_mismatch. Un'estensione del browser che modifica il campo dei WPM, il trucco più comune sui siti che si fidano del client, fallisce qui. Le stesse funzioni producono il numero sul tuo schermo e quello nel database, ed è per questo che la nostra pagina delle metriche può garantire che il suo esempio svolto si riproduce fino alla seconda cifra decimale.

Perché non cronometrare il test sul server? Perché allora il tuo punteggio includerebbe la rete. Ogni battuta ci arriverebbe un po' in ritardo, di una quantità che varia con la tua connessione, e chi scrive veloce su una linea lenta perderebbe velocità che aveva davvero. Il registro ci dà l'orologio del client per la precisione e il ricalcolo del server per l'onestà.

Secondo passo: il registro ha senso?

Prima di qualsiasi analisi dei tempi, ci sono semplici controlli sulla forma dell'invio:

  • Il test deve durare almeno 15 secondi o 10 parole. Le prove più brevi sono troppo rumorose per una classifica e le più facili da gonfiare.
  • Un risultato non può arrivare prima che il test possa essere finito: il suo inizio più la sua durata. Un risultato da 60 secondi che arriva venti secondi dopo l'inizio non è mai avvenuto.
  • Il numero di eventi deve corrispondere ai caratteri digitati.
  • Su computer, ogni evento input deve seguire un keydown entro 50 ms. Questo blocca il testo incollato, gli eventi input generati da script e la maggior parte degli strumenti di iniezione di battute, che producono testo senza un tasto fisico. La scrittura tramite un metodo di input (composizione IME) è esente, e i risultati da telefono restano fuori dalle classifiche pubbliche.
  • Un registro senza inizio, senza fine o con tempi non monotoni è malformato e viene rifiutato subito.

Niente di tutto questo è ingegnoso, ma elimina gran parte del volume.

Terzo passo: cosa può rivelare il ritmo delle battute?

Questa è la parte che di proposito non documentiamo del tutto: l'elenco delle caratteristiche è pubblico, le soglie e i pesi no. Una soglia pubblicata è un bersaglio. Se dicessimo "una deviazione standard sotto N millisecondi viene segnalata", la versione successiva di ogni script aggiungerebbe N più uno. Le caratteristiche a cui diamo un punteggio:

L'intervallo medio tra i tasti e quanto varia. La battitura umana è irregolare. Nello studio di Dhakal e colleghi del 2018 su 168.960 persone, l'intervallo medio tra un tasto e l'altro era di circa 239 ms con una deviazione standard di circa 112 ms. Uno script che scrive a intervallo fisso non ha quasi nessuna variazione; uno studio arXiv del 2025 su un CAPTCHA basato sulle battute ha visto esattamente questo nel suo bot di prova, che scriveva con un ritardo fisso di 50 ms. È il nostro segnale più forte, ed è quello in cui è inciampato il nostro strumento.

La quota di intervalli sotto i 40 ms. Un intervallo di 40 ms, mantenuto, fa 1.500 caratteri al minuto, cioè 300 WPM contando cinque caratteri per parola. Le dita producono davvero singoli intervalli così brevi quando sovrappongono i tasti nel rollover, quindi un intervallo breve non significa niente. Un registro in cui una gran parte degli intervalli è così breve non è battitura.

I tempi di pressione dei tasti. Le dita vere variano di decine di millisecondi; gli eventi sintetici hanno spesso tempi di pressione identici o quasi nulli, perché lo strumento lancia keydown e keyup uno dopo l'altro.

Il rapporto di rollover. Quanto spesso il tasto successivo scende prima che il precedente risalga. Dhakal ha misurato un rapporto di rollover medio del 25%, con la maggior parte di chi scrive veloce in rollover sul 40-70% delle pressioni, e tasti sovrapposti in media per 30 ms. Chi scrive lento non lo usa quasi mai, quindi un risultato veloce senza rollover salta all'occhio. I bot sovrappongono di rado i tasti.

La pausa più lunga, le oscillazioni di velocità da un secondo all'altro e la quota di intervalli sopra il secondo. Le persone esitano in modi che uno script deve essere istruito a imitare.

Un modello di punteggio combina queste caratteristiche e può segnalare un risultato come sospetto. Sotto i 130 WPM, una segnalazione da sola non rifiuta niente. Il tuo risultato non ti viene mai nascosto; questi controlli decidono solo se entra in classifica.

Chi bara in un test di battitura può superare i controlli sui tempi?

Sì, se il trucco è costruito con cura. Un articolo arXiv di gennaio 2026 di David Condrey ha messo alla prova dei rilevatori basati sul ritmo delle battute pensati per distinguere il testo scritto da una persona da quello generato dall'IA. Separavano perfettamente l'iniezione del tutto automatica, ma gli attacchi con tempi umani (una persona che ribatte un testo dell'IA, o un programma che campiona i ritardi da dati di battitura umana) sfuggivano a tutti e cinque i classificatori in almeno il 99,8% dei casi. L'articolo parla di attribuzione dell'autore, non di test di battitura, ma la lezione vale anche qui: il terzo passo ferma i distratti e poco altro.

Il nostro strumento di test dimostra la stessa cosa su piccola scala: un'oscillazione casuale e qualche pausa lo hanno portato da palesemente sintetico a plausibile.

Quindi il terzo passo è un filtro. Il verdetto arriva dal quarto.

Quarto passo: il nuovo test di verifica

Se un risultato a tempo è sopra i 130 WPM e anche il suo ritmo sembra insolito, lo vedi e viene salvato, ma resta fuori dalle classifiche pubbliche finché non superi un nuovo test di verifica. È un nuovo test da 30 secondi, e devi raggiungere almeno il 75% della velocità dichiarata. Un colpo di fortuna isolato o un registro preso in prestito non sopravvivono a una seconda prova.

Perché 130 WPM? È circa due volte e mezzo la media di 51,56 WPM dei dati di Dhakal, ben oltre la maggior parte delle persone, e chi scrive davvero così veloce può farlo due volte. Un risultato improvvisamente veloce con un ritmo strano è proprio la forma che produce un registro preso in prestito o uno script, e se è onesto, un test in più è un piccolo prezzo.

Il nuovo test è un normale test di battitura, su un testo normale, non un'immagine distorta o una pagina di simboli strani. Un testo difficile da leggere rallenta tutti, e chi rallenta di più sono proprio le persone veloci e oneste che il nuovo test deve promuovere. Una verifica che le persone veloci e oneste non superano è peggio di nessuna verifica. Un testo normale rende anche il controllo equo: il registro del nuovo test passa per gli stessi controlli sui tempi di qualsiasi altro risultato.

Limiti di frequenza e ban

Gli invii hanno un limite di frequenza: trenta al minuto per ogni utente che ha effettuato l'accesso, sessanta per indirizzo IP. Un account che continua a far scattare i controlli riceve uno shadow ban, cioè viene nascosto silenziosamente dalle classifiche, e tre eventi anti-cheat gravi in 24 ore lo attivano in automatico. Contare gli eventi all'interno di una finestra di tempo fa sì che un singolo risultato strano non ti costi mai l'account, mentre uno script che fallisce di continuo si ferma in fretta.

Le classifiche di sempre richiedono inoltre 30 minuti di battitura sull'account, quindi un account nuovo con una sola prova perfetta non può finire in cima.

Cosa ti fa segnalare per sbaglio

La maggior parte dei risultati segnalati non è frutto di imbrogli. I modi onesti di far scattare un controllo:

La correzione automatica sul telefono. Una sostituzione arriva come un unico evento input che cambia più caratteri. Lo contiamo come una sola pressione di tasto, lo segnaliamo e teniamo il risultato fuori dalle classifiche pubbliche con una nota, non con un rifiuto.

Testo incollato. Incollare è bloccato, e un risultato in cui ci si è provato viene escluso dalle classifiche.

Cambiare scheda. Se il focus lascia la pagina per più di due secondi durante un test, il test viene segnato come interrotto; viene salvato e mostrato, ma non entra in classifica.

Fare pause. Un intervallo di oltre cinque secondi in un test a parole o a citazione segna il risultato come in pausa. Stesso trattamento.

Composizione IME. L'input in giapponese, coreano e cinese arriva tramite eventi di composizione, quindi per queste lingue saltiamo la regola del keydown. Se qualcosa sembra comunque sbagliato, è un bug, e ci piacerebbe avere il registro.

Risultati offline. Un risultato sincronizzato più di dieci minuti dopo la fine resta nella tua cronologia senza entrare in classifica, perché non possiamo convalidare il suo orologio.

Essere davvero veloci. Sopra i 130 WPM incontrerai il nuovo test, probabilmente nella tua prima giornata buona.

Come presentare ricorso

Ogni esclusione mostra il suo motivo nella tua cronologia. Se pensi che ci siamo sbagliati su un risultato o su una restrizione, scrivi all'indirizzo per i ricorsi indicato nella nostra pagina anti-cheat dall'indirizzo email del tuo account, con il link al risultato o la data e l'ora del test. Una persona guarda la riproduzione delle battute e risponde entro pochi giorni. I ricorsi non vengono mai decisi dal solo modello automatico.

Abbiamo appena pubblicato una guida per superare i controlli? In parte. L'elenco delle caratteristiche si poteva sempre ricavare dal comportamento, e le soglie restano private. Il nuovo test è la parte che conta, e il modo per superarlo è scrivere.

Domande frequenti

Come fanno i test di battitura a scoprire i bot?

Quelli buoni leggono il registro dei tasti: se dietro ogni carattere c'è la pressione di un tasto, quanto variano gli intervalli tra i tasti e come i tasti vengono tenuti premuti e sovrapposti. Gli script tendono a essere troppo regolari; i bot fatti bene possono imitare le persone, ed è per questo che aggiungiamo un nuovo test.

Un bot può superare l'anti-cheat di un test di battitura?

Uno fatto bene può superare i controlli sui tempi: una ricerca sui rilevatori basati sul ritmo delle battute ha trovato che tempi falsificati dall'aria umana li eludevano quasi sempre. Per questo teniamo da parte i risultati veloci in attesa di un nuovo test, che un bot deve superare di nuovo con un secondo registro che passi gli stessi controlli.

Perché il mio risultato non è entrato in classifica?

Di solito per un test sotto i 15 secondi o le 10 parole, una pausa di oltre cinque secondi, un cambio di scheda, o un risultato sopra i 130 WPM in attesa del nuovo test. La tua cronologia mostra il motivo.

Fonti