A gépelési tesztek úgy szűrik ki a csalást, hogy ellenőrzik az egyes eredmények mögötti leütésnaplót. A mienk minden eredményt újraszámol a leütésnaplóból, ellenőriz egy hasht, megvizsgálja a napló szerkezetét és időzítését, és minden olyan időzített, 130 WPM fölötti eredményt, amelynek az időzítése is szokatlannak tűnik, távol tart a nyilvános ranglistáktól, amíg át nem mész egy újrateszten. Az időzítési ellenőrzések a hanyag botokat fogják meg; az újrateszt a gondosakat is arra kényszeríti, hogy az egészet még egyszer megcsinálják.
Az első bot, amely túljárt az időzítési ellenőrzéseink eszén, a sajátunk volt.
A végponttól végpontig tartó (end-to-end) tesztjeink segédprogramja fix, 40 ms-os időközönként nyomta le a billentyűket, mert egy tesztszkript ezt csinálja. A szerver újraszámolta az eredményt, jóváhagyta a hasht, és gyanúsnak pontozta a futást: nulla szórás a leütések között, nulla rollover, egyforma lenyomási idők. Szavanként véletlenszerű ingadozást és alkalmanként 80–300 ms-os „gondolkodási” szüneteket kellett hozzáadnunk, mielőtt a saját tesztsorunk emberinek látszó eredményt tudott beküldeni. Az opció ma is ott van a kódban, humanLike néven.
Az ellenőrzések mindennel szemben működnek, ami nem próbálkozik, és bármi, ami próbálkozik, átjuthat rajtuk, ezért a rendszer a valódi súlyt egy újratesztre helyezi.
Első lépés: mindent újraszámolunk
A böngésződ nem WPM-et küld nekünk. Elküldi a leütésnaplót (minden keydown, keyup, input és composition eseményt, a monoton performance.now() órával időbélyegezve), az általa kiszámolt mérőszámokat és a kanonikus eredmény SHA-256 hashét.
A szerver ugyanazt a mérőszámkódot futtatja le a naplón, és összehasonlít. Ha bármelyik szám 0,01-nél jobban eltér, az eredményt metrics_mismatch okkal elutasítja. Ha a hash nem egyezik, hash_mismatch okkal. Egy böngészőbővítmény, amely átírja a WPM mezőt (ez a leggyakoribb csalás azokon az oldalakon, amelyek megbíznak a kliensben), itt elbukik. Ugyanazok a függvények állítják elő a számot a képernyődön és az adatbázisban, ezért ígérheti a mérőszámokról szóló oldalunk, hogy a kidolgozott példája két tizedesjegyig reprodukálható.
Miért nem a szerveren mérjük a teszt idejét? Mert akkor az eredményedbe a hálózat is beleszámítana. Minden leütés kicsit késve érne hozzánk, a kapcsolatodtól függően változó mértékben, és egy lassú vonalon gépelő gyors ember olyan sebességet veszítene, amely valóban megvolt neki. A napló a kliens óráját adja a pontossághoz, a szerveroldali újraszámolás pedig a tisztességet.
Második lépés: van értelme a naplónak?
Minden időzítési elemzés előtt egyszerű ellenőrzések jönnek a beküldés formájára:
- A tesztnek legalább 15 másodpercig vagy 10 szóig kell tartania. A rövidebb futások túl zajosak a rangsoroláshoz, és a legkönnyebb felfújni őket.
- Az eredmény nem érkezhet meg előbb, mint ahogy a teszt véget érhetett: a kezdete plusz a saját hossza. Egy 60 másodperces eredmény, amely húsz másodperccel a kezdete után érkezik, nem történt meg.
- Az események számának illeszkednie kell a begépelt karakterekhez.
- Asztali gépen minden input eseménynek 50 ms-on belül egy keydown eseményt kell követnie. Ez megfogja a beillesztett szöveget, a szkriptelt input eseményeket és a legtöbb leütésbefecskendező eszközt, amelyek fizikai billentyű nélkül küldenek szöveget. A beviteli módszer-szerkesztővel (IME composition) történő gépelés kivétel, a telefonos eredmények pedig nem kerülnek a nyilvános ranglistákra.
- Egy kezdet vagy vég nélküli, illetve nem monoton időbélyegeket tartalmazó napló hibás, és azonnal elutasítjuk.
Ebben semmi ravaszság nincs, de a mennyiség nagy részét kiszűri.
Harmadik lépés: mit árulhat el a leütések időzítése?
Ezt a részt szándékosan nem dokumentáljuk teljesen: a jellemzők listája nyilvános, a határértékek és a súlyok nem. Egy közzétett határérték célpont. Ha azt mondanánk, hogy „N milliszekundum alatti szórást megjelölünk”, minden szkript következő változata N plusz egyet adna hozzá. A jellemzők, amelyeket pontozunk:
A billentyűk közötti átlagos szünet, és hogy mennyire ingadozik. Az emberi gépelés szabálytalan. Dhakal és kollégái 2018-as, 168 960 gépelőre kiterjedő vizsgálatában a billentyűközi idő átlaga nagyjából 239 ms volt, nagyjából 112 ms-os szórással. Egy fix időközönként gépelő szkriptnek szinte nincs ingadozása; egy 2025-ös arXiv-tanulmány egy leütésalapú CAPTCHA-ról pontosan ezt látta a tesztbotjánál, amely fix 50 ms-os késleltetéssel gépelt. Ez a legerősebb jelünk, és ezen akadt fenn a segédprogramunk is.
A 40 ms alatti szünetek aránya. A tartósan fenntartott 40 ms-os szünet percenként 1500 karakter, vagyis szavanként öt karakterrel számolva 300 WPM. Az ujjak a rollover során egymást átfedő billentyűknél valóban produkálnak ilyen rövid egyedi szüneteket, így egyetlen rövid szünet semmit sem jelent. Az a napló, amelyben a szünetek nagy része ilyen rövid, nem gépelés.
A billentyűk lenyomási ideje. A valódi ujjaknál ez több tíz milliszekundummal ingadozik; a szintetikus eseményeknél gyakran egyforma vagy közel nulla, mert az eszköz a keydownt és a keyupot közvetlenül egymás után küldi.
Rollover-arány. Milyen gyakran megy le a következő billentyű, mielőtt az előző felengedne. Dhakal 25%-os átlagos rollover-arányt mért, a legtöbb gyors gépelő a leütések 40–70%-ánál alkalmazta, és a billentyűk átlagosan 30 ms-ig fedték egymást. A lassú gépelők szinte egyáltalán nem használják, így egy rollover nélküli gyors eredmény kilóg. A botok ritkán fedik át a billentyűket.
A leghosszabb szünet, a másodpercről másodpercre változó sebesség kilengései és az egy másodpercnél hosszabb szünetek aránya. Az emberek úgy haboznak, ahogy egy szkriptnek külön meg kell mondani, hogy utánozza.
Egy pontozó modell kombinálja ezeket, és gyanúsnak jelölhet meg egy eredményt. 130 WPM alatt egy megjelölés önmagában semmit sem utasít el. Az eredményedet sosem rejtjük el előled; ezek az ellenőrzések csak azt döntik el, hogy rangsorolják-e.
Átjuthat a csalás az időzítési ellenőrzéseken?
Igen, ha a csalást gondosan építik meg. David Condrey 2026 januári arXiv-tanulmánya olyan leütésidőzítési detektorokat tesztelt, amelyeknek az ember által gépelt szöveget kellett volna elválasztaniuk a mesterséges intelligencia által generálttól. A teljesen automatizált befecskendezést tökéletesen kiszűrték, de az emberi időzítésű támadások (amikor egy ember gépeli újra az MI szövegét, vagy egy program emberi gépelési adatokból mintavételezi a késleltetéseket) mind az öt osztályozót legalább 99,8%-os arányban kijátszották. A tanulmány a szerzőség megállapításáról szól, nem gépelési tesztekről, de a tanulság átvihető: a harmadik lépés a hanyagokat fogja meg, és nem sok mást.
A saját teszt-segédprogramunk kis léptékben ugyanezt mutatja: a véletlen ingadozás és néhány szünet nyilvánvalóan szintetikusból hihetővé tette.
Így a harmadik lépés szűrő. Az ítéletet a negyedik lépés hozza.
Negyedik lépés: az igazoló újrateszt
Ha egy időzített eredmény 130 WPM fölött van, és az időzítése is szokatlannak tűnik, látod és el is mentjük, de távol marad a nyilvános ranglistáktól, amíg át nem mész egy igazoló újrateszten. Ez egy új, 30 másodperces teszt, és el kell érned a bejelentett sebességed legalább 75%-át. Egy egyszeri szerencsés véletlen vagy egy kölcsönvett napló nem éli túl a második futást.
Miért 130 WPM? Ez nagyjából két és félszerese Dhakal adataiban az 51,56 WPM-es átlagnak, jóval a legtöbb gépelő fölött van, és aki tényleg ilyen gyorsan gépel, kétszer is meg tudja csinálni. Egy hirtelen gyors, furcsa időzítésű eredmény pontosan olyan alakú, amilyet egy kölcsönvett napló vagy egy szkript hoz létre, és ha becsületes, egy plusz teszt csekély ár.
Az újrateszt egy hétköznapi gépelési teszt, hétköznapi szöveggel, nem torzított kép vagy furcsa szimbólumokkal teli oldal. A nehezen olvasható szöveg mindenkit lelassít, és leginkább azokat a becsületes gyors gépelőket, akiknek a tisztázására az újrateszt létezik. Egy ellenőrzés, amelyen a becsületes gyors gépelők elbuknak, rosszabb, mint ha nem is lenne. A hétköznapi szöveg ráadásul igazságossá is teszi az ellenőrzést: az újrateszt saját naplója ugyanazokon az időzítési ellenőrzéseken megy át, mint bármely más eredmény.
Gyakoriságkorlátok és tiltások
A beküldések gyakorisága korlátozott: bejelentkezett felhasználónként percenként harminc, IP-címenként hatvan. Az a fiók, amely újra és újra fennakad az ellenőrzéseken, árnyéktiltást kap, vagyis csendben eltűnik a ranglistákról, és 24 órán belül három súlyos csalásszűrési esemény ezt automatikusan kiváltja. Mivel az eseményeket egy időablakon belül számoljuk, egyetlen furcsa eredmény sosem kerül a fiókodba, egy újra és újra elbukó szkript viszont gyorsan leáll.
A mindenkori ranglisták ráadásul 30 perc gépelést követelnek meg a fióktól, így egy friss fiók egyetlen tökéletes futással nem kerülhet az élükre.
Mivel jelölhetnek meg véletlenül
A legtöbb megjelölt eredmény nem csalás. A becsületes módjai annak, hogy fennakadj egy ellenőrzésen:
Automatikus javítás telefonon. Egy csere egyetlen input eseményként érkezik, amely több karaktert módosít. Egy billentyűleütésnek számoljuk, megjelöljük, és egy megjegyzéssel távol tartjuk az eredményt a nyilvános ranglistáktól, nem utasítjuk el.
Beillesztett szöveg. A beillesztés le van tiltva, és az az eredmény, amelynél megpróbálták, kimarad a ranglistákról.
Lapváltás. Ha teszt közben a fókusz két másodpercnél tovább elhagyja az oldalt, a tesztet megszakítottnak jelöljük; elmentjük és megmutatjuk, de nem rangsoroljuk.
Szünet. Egy szó- vagy idézetteszten öt másodpercnél hosszabb kihagyás szüneteltetettnek jelöli az eredményt. Ugyanaz a bánásmód.
IME composition. A japán, koreai és kínai bevitel composition eseményeken keresztül érkezik, ezért náluk kihagyjuk a keydown-szabályt. Ha valami ennek ellenére hibásnak tűnik, az programhiba, és szívesen megkapnánk a naplót.
Offline eredmények. Egy eredmény, amely több mint tíz perccel a befejezése után szinkronizálódik, rangsorolás nélkül marad az előzményeid között, mert nem tudjuk ellenőrizni az óráját.
Ha valóban gyors vagy. 130 WPM fölött találkozni fogsz az újrateszttel, valószínűleg már az első jó napodon.
Hogyan fellebbezhetsz
Minden kizárás oka megjelenik az előzményeidben. Ha úgy gondolod, hogy egy eredménnyel vagy korlátozással kapcsolatban tévedünk, írj a csalásszűrési oldalunkon megadott fellebbezési címre a fiókodhoz tartozó e-mail-címről, mellékelve az eredmény linkjét vagy a teszt dátumát és időpontját. Egy ember megnézi a leütések visszajátszását, és néhány napon belül válaszol. A fellebbezésekről soha nem egyedül az automatikus modell dönt.
Most közzétettünk egy útmutatót az ellenőrzések kijátszásához? Részben. A jellemzők listája a viselkedésből mindig kikövetkeztethető volt, a határértékek pedig titkosak maradnak. Az újrateszt a lényeg, és úgy lehet átmenni rajta, ha gépelsz.
Gyakori kérdések
Hogyan szűrik ki a gépelési tesztek a botokat?
A jók a leütésnaplót olvassák: van-e minden karakter mögött billentyűlenyomás, mennyire ingadoznak a billentyűk közötti szünetek, és hogyan tartják lenyomva és fedik át a billentyűket. A szkriptek általában túl szabályosak; a gondos botok utánozhatják az embereket, ezért teszünk hozzá egy újratesztet.
Átjuthat egy bot egy gépelési teszt csalásszűrésén?
Egy gondos bot átjuthat az időzítési ellenőrzéseken: a leütésidőzítési detektorokról szóló kutatás szerint a hamisított, emberszerű időzítés szinte minden alkalommal kijátszotta őket. Ezért tartjuk vissza a gyors eredményeket egy újrateszthez, amelyen a botnak újra át kell mennie egy második naplóval, amely ugyanazokon az ellenőrzéseken megy át.
Miért nem került rangsorba a gépelési teszt eredményem?
Általában egy 15 másodpercnél vagy 10 szónál rövidebb teszt, egy öt másodpercnél hosszabb szünet, egy lapváltás vagy egy 130 WPM fölötti, újratesztre váró eredmény az oka. Az előzményeid megmutatják az okot.