Nade-detect ng mga typing test ang pandaraya sa pamamagitan ng pagsuri sa keystroke log sa likod ng bawat score. Kinukuwenta naming muli ang bawat resulta mula sa keystroke log nito, sinusuri ang hash, sinusubok ang istruktura at timing ng log, at hindi muna inilalagay sa mga pampublikong board ang anumang resultang may oras na lampas 130 WPM na kakaiba rin ang timing hanggang pumasa ka sa muling pagsubok. Nahuhuli ng mga timing check ang mga pabayang bot; pinapaulit naman ng muling pagsubok ang lahat sa isang maingat na bot.
Ang unang bot na nakalusot sa mga timing check namin ay sa amin mismo.
Pumipindot ang end-to-end test helper namin ng mga key sa nakapirming pagitan na 40 ms, dahil iyan ang ginagawa ng isang test script. Kinuwentang muli ng server ang resulta, kinumpirma ang hash, at minarkahang kahina-hinala ang takbo: zero na variance sa pagitan ng mga keystroke, zero na rollover, magkakaparehong hold time. Kinailangan naming magdagdag ng random na jitter bawat salita at paminsan-minsang 80 hanggang 300 ms na paghintong "nag-iisip" bago makapag-post ang sarili naming test suite ng resultang mukhang tao. Nasa code pa rin ang opsyon, may label na humanLike.
Gumagana ang mga check laban sa anumang hindi sumusubok, at kayang lumusot sa mga ito ng anumang sumusubok, kaya sa muling pagsubok inilalagay ng disenyo ang totoong bigat.
Unang hakbang: kuwentahing muli ang lahat
Hindi nagpapadala ng WPM sa amin ang browser mo. Ipinapadala nito ang keystroke log (bawat keydown, keyup, input at composition event, may timestamp mula sa monotonic na orasang performance.now()), ang mga metric na kinuwenta nito, at isang SHA-256 hash ng canonical na resulta.
Pinapatakbo ng server ang parehong code ng metric sa log at naghahambing. Kung may anumang numerong lumihis nang higit sa 0.01, tinatanggihan ang resulta bilang metrics_mismatch. Kung hindi tugma ang hash, tinatanggihan ito bilang hash_mismatch. Pumapalya rito ang browser extension na nag-e-edit ng field ng WPM, ang pinakakaraniwang pandaraya sa mga site na nagtitiwala sa client. Iisang mga function ang gumagawa ng numero sa screen mo at sa database, kaya maipapangako ng pahina namin tungkol sa mga metric na nauulit hanggang dalawang decimal ang halimbawang kuwenta nito.
Bakit hindi orasan ang test sa server? Kung gagawin iyon, kasama na sa score mo ang network. Darating sa amin nang medyo huli ang bawat keystroke, sa halagang nag-iiba depende sa koneksyon mo, at mawawalan ng bilis na talagang taglay niya ang mabilis na typist sa mabagal na linya. Ibinibigay sa amin ng log ang orasan ng client para sa katumpakan at ang muling pagkuwenta ng server para sa katapatan.
Ikalawang hakbang: may saysay ba ang log?
Bago ang anumang pagsusuri ng timing, mga simpleng check sa hugis ng isinumite:
- Kailangang tumagal ang test nang hindi bababa sa 15 segundo o 10 salita. Masyadong magulo ang mas maiikling takbo para i-ranggo at pinakamadaling palakihin.
- Hindi puwedeng dumating ang resulta bago pa matapos ang test: ang simula nito dagdag ang sarili nitong haba. Ang 60-segundong resultang dumating dalawampung segundo pagkatapos magsimula ay hindi nangyari.
- Kailangang tugma ang bilang ng event sa mga karakter na na-type.
- Sa desktop, bawat input event ay kailangang sumunod sa isang keydown sa loob ng 50 ms. Nahuhuli nito ang na-paste na teksto, mga input event na gawa ng script at karamihan sa mga tool na nag-iiniksiyon ng keystroke, na naglalabas ng teksto nang walang pisikal na key. Exempted ang pag-type sa pamamagitan ng input method editor (IME composition), at hindi kasama sa mga pampublikong board ang mga resulta sa phone.
- Ang log na walang simula, walang dulo o may mga timestamp na hindi monotonic ay sira at agad na tinatanggihan.
Wala ritong matalino, pero inaalis nito ang karamihan ng dami.
Ikatlong hakbang: ano ang maibubunyag ng timing ng keystroke?
Ito ang bahaging sinadya naming hindi buong idokumento: pampubliko ang listahan ng mga feature, hindi ang mga cut-off at bigat. Target ang isang nailathalang cut-off. Kung sasabihin naming "minamarkahan ang standard deviation na mas mababa sa N millisecond", ang susunod na bersyon ng bawat script ay magdadagdag ng N plus isa. Ang mga feature na binibigyan namin ng score:
Ang average na agwat sa pagitan ng mga key at kung gaano ito nag-iiba. Hindi regular ang pag-type ng tao. Sa pag-aaral nina Dhakal at mga kasama noong 2018 sa 168,960 typist, mga 239 ms ang average na inter-key interval na may standard deviation na mga 112 ms. Halos walang pagbabago ang script na nagta-type sa nakapirming pagitan; eksaktong ganoon ang nakita ng isang pag-aaral sa arXiv noong 2025 tungkol sa CAPTCHA na nakabatay sa keystroke sa test bot nito, na nag-type nang may nakapirming 50 ms na delay. Ito ang pinakamalakas naming senyales, at ito ang natisod ng helper namin.
Ang bahagi ng mga agwat na mas mababa sa 40 ms. Ang 40 ms na agwat, kapag napanatili, ay 1,500 karakter bawat minuto, o 300 WPM sa limang karakter bawat salita. Nakakagawa nga ang mga daliri ng iisang ganoon kaikling agwat kapag nagsasabay ang mga key habang nagro-rollover, kaya walang ibig sabihin ang isang maikling agwat. Ang log na malaking bahagi ng mga agwat ay ganoon kaikli ay hindi pag-type.
Ang hold time ng key. Nag-iiba nang sampu-sampung millisecond ang totoong daliri; madalas magkakapareho o halos zero ang hold time ng mga artipisyal na event, dahil magkasunod na inilalabas ng tool ang keydown at keyup.
Rollover ratio. Kung gaano kadalas bumababa ang susunod na key bago umangat ang nauna. Sinukat ni Dhakal ang average na rollover ratio na 25%, na karamihan sa mabibilis na typist ay nagro-rollover sa 40 hanggang 70% ng mga pindot, at nagsasabay ang mga key nang 30 ms sa average. Halos hindi gumagamit nito ang mabagal na typist, kaya namumukod-tangi ang mabilis na resultang walang rollover. Bihirang magsabay ng mga key ang mga bot.
Ang pinakamahabang paghinto, ang pag-uga ng bilis bawat segundo, at ang bahagi ng mga agwat na lampas isang segundo. Nag-aalangan ang tao sa mga paraang kailangang iutos sa script para gayahin.
Pinagsasama ng isang scoring model ang mga ito at puwede nitong markahang kahina-hinala ang isang resulta. Sa ibaba ng 130 WPM, walang tinatanggihan ang marka nang mag-isa. Hindi kailanman itinatago sa iyo ang resulta mo; ang tanging pinagpapasyahan ng mga check na ito ay kung mai-ranggo ito.
Kaya bang makalusot ng pandaraya sa typing test sa mga timing check?
Oo, kung maingat ang pagkakagawa ng pandaraya. Sinubok ng isang papel ni David Condrey sa arXiv noong Enero 2026 ang mga detector ng timing ng keystroke na dapat maghiwalay sa tekstong tinype ng tao at tekstong gawa ng AI. Perpekto nilang naihiwalay ang ganap na awtomatikong iniksiyon, pero nakalusot sa lahat ng limang classifier ang mga atakeng may timing ng tao (isang taong muling nagta-type ng tekstong gawa ng AI, o programang kumukuha ng mga delay mula sa datos ng pag-type ng tao) sa rate na hindi bababa sa 99.8%. Tungkol sa pag-detect ng awtor ang papel, hindi sa mga typing test, pero madadala ang aral: nahuhuli ng ikatlong hakbang ang mga pabaya at halos wala nang iba.
Ganoon din ang punto ng sarili naming test helper sa maliit na sukat: inilipat ito ng random na jitter at ilang paghinto mula sa halatang artipisyal tungo sa kapani-paniwala.
Kaya isang filter ang ikatlong hakbang. Sa ikaapat na hakbang galing ang hatol.
Ikaapat na hakbang: ang muling pagsubok para sa verification
Kung lampas 130 WPM ang isang resultang may oras at kakaiba rin ang timing nito, nakikita mo ito at naka-save ito, pero hindi ito inilalagay sa mga pampublikong board hanggang pumasa ka sa muling pagsubok para sa verification. Bagong 30-segundong test iyon, at kailangan mong umabot sa hindi bababa sa 75% ng bilis na inangkin mo. Hindi nakakaligtas sa ikalawang takbo ang isang beses na tsamba o hiniram na log.
Bakit 130 WPM? Mga dalawa't kalahating beses ito ng mean na 51.56 WPM sa datos ni Dhakal, malayong lampas sa karamihan ng typist, at kayang gawin ito nang dalawang beses ng sinumang talagang ganoon kabilis mag-type. Ang biglang mabilis na resultang kakaiba ang timing ay ang hugis na nalilikha ng hiniram na log o ng script, at kung tapat ito, maliit na halaga ang isang dagdag na test.
Ordinaryong typing test ang muling pagsubok, sa ordinaryong teksto, hindi baluktot na larawan o pahina ng mga kakaibang simbolo. Pinababagal ng mahirap basahing teksto ang lahat, at ang pinakapinababagal nito ay ang mga tapat na mabibilis na typist na siyang dahilan ng muling pagsubok. Mas masahol pa sa wala ang verification na binabagsak ng mga tapat na mabibilis na typist. Ginagawa ring patas ng ordinaryong teksto ang check: dumadaan ang sariling log ng muling pagsubok sa parehong mga timing check gaya ng anumang ibang resulta.
Mga rate limit at ban
May rate limit ang mga pagsusumite: tatlumpu bawat minuto bawat naka-sign in na user, animnapu bawat IP address. Ang account na paulit-ulit na tumatama sa mga check ay sina-shadow-ban, ibig sabihin ay tahimik na itinatago sa mga board, at awtomatikong nangyayari iyon kapag may tatlong seryosong anti-cheat event sa loob ng 24 oras. Dahil binibilang ang mga event sa loob ng isang window, hindi kailanman mawawalan ng account dahil sa isang kakaibang resulta, habang mabilis namang humihinto ang script na paulit-ulit na pumapalya.
Nangangailangan din ang mga all-time na leaderboard ng 30 minutong pag-type sa account, kaya hindi mapangungunahan ang mga ito ng bagong account na may iisang perpektong takbo.
Ano ang maaaring magpamarka sa iyo nang hindi sinasadya
Karamihan sa mga minarkahang resulta ay hindi pandaraya. Ang mga tapat na paraan para tumama sa isang check:
Autocorrect sa phone. Dumarating ang isang pagpapalit bilang isang input event na nagbabago ng ilang karakter. Binibilang namin ito bilang isang pindot ng key, minamarkahan, at hindi inilalagay ang resulta sa mga pampublikong board na may kasamang paalala, hindi pagtanggi.
Na-paste na teksto. Naka-block ang pag-paste, at hindi isinasama sa mga board ang resultang may sinubukang pag-paste.
Paglipat ng tab. Kapag umalis ang focus sa pahina nang higit sa dalawang segundo habang may test, minamarkahan itong naantala; naka-save at ipinapakita ito pero hindi nira-ranggo.
Paghinto. Ang agwat na lampas limang segundo sa word o quote test ay nagmamarka sa resulta bilang nakahinto. Parehong pagtrato.
IME composition. Dumarating ang input sa Japanese, Korean at Chinese sa pamamagitan ng mga composition event, kaya nilalaktawan namin ang patakaran sa keydown para sa mga iyon. Kung may mukhang mali pa rin, bug iyon, at gusto naming makita ang log.
Mga offline na resulta. Ang resultang na-sync nang higit sa sampung minuto matapos itong matapos ay nananatili sa kasaysayan mo nang hindi nira-ranggo, dahil hindi namin ma-validate ang orasan nito.
Talagang pagiging mabilis. Lampas 130 WPM, makakasalubong mo ang muling pagsubok, malamang sa una mong magandang araw.
Paano mag-apela
Ipinapakita sa kasaysayan mo ang dahilan ng bawat hindi pagsama. Kung sa tingin mo ay mali kami tungkol sa isang resulta o restriksyon, mag-email sa address para sa apela sa pahina namin ng anti-cheat mula sa email address ng account mo, kasama ang link ng resulta o ang petsa at oras ng test. Pinapanood ng isang tao ang replay ng keystroke at sumasagot sa loob ng ilang araw. Hindi kailanman pinagpapasyahan ang mga apela ng automated model lang.
Naglathala ba kami ngayon ng gabay kung paano lumusot sa mga check? Bahagya. Matutuklasan naman talaga ang listahan ng mga feature mula sa kilos, at nananatiling pribado ang mga cut-off. Ang muling pagsubok ang mahalagang bahagi, at ang paraan para pumasa rito ay mag-type.
Mga madalas itanong
Paano nade-detect ng mga typing test ang mga bot?
Binabasa ng mga mahuhusay ang keystroke log: kung may pindot ng key sa likod ng bawat karakter, gaano nag-iiba ang mga agwat sa pagitan ng mga key, at paano hinahawakan at pinagsasabay ang mga key. Kadalasang masyadong regular ang mga script; kayang gayahin ng maiingat na bot ang tao, kaya nagdadagdag kami ng muling pagsubok.
Kaya bang lumusot ng bot sa anti-cheat ng typing test?
Kayang lumusot ng isang maingat sa mga timing check: nakita ng pananaliksik sa mga detector ng timing ng keystroke na halos laging nakalusot sa mga ito ang pekeng timing na parang tao. Kaya pinipigil namin ang mabibilis na resulta para sa muling pagsubok, na kailangang ipasang muli ng bot gamit ang ikalawang log na papasa sa parehong mga check.
Bakit hindi nai-ranggo ang resulta ko sa typing test?
Kadalasan ay test na mas maikli sa 15 segundo o 10 salita, paghintong lampas limang segundo, paglipat ng tab, o resultang lampas 130 WPM na naghihintay ng muling pagsubok nito. Ipinapakita ng kasaysayan mo ang dahilan.