Jak testy pisania wykrywają oszustwa? Jak sprawdzamy nasze

Testy pisania wykrywają oszustwa, sprawdzając dziennik naciśnięć klawiszy, który stoi za każdym wynikiem. Nasz test przelicza każdy wynik z jego dziennika klawiszy, sprawdza hash, bada strukturę i rytm dziennika, a każdy wynik z testu na czas powyżej 130 WPM, którego rytm dodatkowo wygląda nietypowo, trzyma poza publicznymi rankingami, dopóki nie zaliczysz ponownego testu. Kontrole rytmu łapią nieostrożne boty; ponowny test każe ostrożnemu botowi zrobić wszystko jeszcze raz.

Pierwszy bot, który przeszedł nasze kontrole rytmu, był nasz.

Nasz pomocnik do testów end-to-end naciskał klawisze w stałych odstępach co 40 ms, bo tak właśnie robi skrypt testowy. Serwer przeliczył wynik, potwierdził hash i ocenił przebieg jako podejrzany: zerowa zmienność między naciśnięciami, zero rolloveru, identyczne czasy przytrzymania. Musieliśmy dodać losowe drgania dla każdego słowa i od czasu do czasu 80–300-milisekundowe pauzy „na myślenie”, zanim nasz własny zestaw testów mógł wysłać wynik wyglądający na ludzki. Ta opcja wciąż jest w kodzie, pod nazwą humanLike.

Kontrole działają na wszystko, co się nie stara, a wszystko, co się stara, może je przejść, więc projekt kładzie prawdziwy ciężar na ponownym teście.

Krok pierwszy: przeliczyć wszystko

Twoja przeglądarka nie wysyła nam WPM. Wysyła dziennik klawiszy (każde zdarzenie keydown, keyup, input i composition, ze znacznikiem czasu z monotonicznego zegara performance.now()), metryki, które sama obliczyła, i hash SHA-256 kanonicznej postaci wyniku.

Serwer uruchamia na dzienniku ten sam kod metryk i porównuje. Jeśli którakolwiek liczba różni się o więcej niż 0,01, wynik jest odrzucany jako metrics_mismatch. Jeśli hash się nie zgadza, wynik jest odrzucany jako hash_mismatch. Rozszerzenie przeglądarki, które edytuje pole WPM, czyli najczęstsze oszustwo na stronach ufających klientowi, odpada właśnie tutaj. Te same funkcje dają liczbę na twoim ekranie i w bazie danych, dlatego nasza strona o metrykach może obiecać, że jej przykład z obliczeniami odtwarza się co do dwóch miejsc po przecinku.

Dlaczego nie mierzyć czasu testu na serwerze? Wtedy w twoim wyniku byłaby sieć. Każde naciśnięcie docierałoby do nas trochę spóźnione, o wartość zależną od twojego łącza, a szybka osoba na wolnym łączu straciłaby szybkość, którą naprawdę miała. Dziennik daje nam zegar klienta dla dokładności i przeliczenie na serwerze dla uczciwości.

Krok drugi: czy dziennik ma sens?

Przed jakąkolwiek analizą rytmu proste kontrole kształtu przesłanych danych:

  • Test musi trwać co najmniej 15 sekund lub 10 słów. Krótsze przebiegi są zbyt zaszumione, żeby je klasyfikować, i najłatwiej je zawyżyć.
  • Wynik nie może przyjść, zanim test mógł się skończyć, czyli przed momentem rozpoczęcia powiększonym o jego długość. 60-sekundowy wynik, który przychodzi dwadzieścia sekund po starcie, nie miał miejsca.
  • Liczba zdarzeń musi pasować do liczby wpisanych znaków.
  • Na komputerze każde zdarzenie input musi nastąpić w ciągu 50 ms po zdarzeniu keydown. To łapie wklejony tekst, skryptowe zdarzenia input i większość narzędzi do wstrzykiwania naciśnięć, które wysyłają tekst bez fizycznego klawisza. Pisanie przez edytor metody wprowadzania (kompozycja IME) jest z tego zwolnione, a wyniki z telefonu pozostają poza publicznymi rankingami.
  • Dziennik bez początku, bez końca albo z niemonotonicznymi znacznikami czasu jest uszkodzony i zostaje od razu odrzucony.

Nic z tego nie jest sprytne, ale usuwa większość zgłoszeń.

Krok trzeci: co może zdradzić rytm naciśnięć?

Tej części celowo nie dokumentujemy w pełni: lista cech jest publiczna, progi i wagi nie. Opublikowany próg to cel. Gdybyśmy napisali „oznaczamy odchylenie standardowe poniżej N milisekund”, następna wersja każdego skryptu dodałaby N plus jeden. Cechy, które oceniamy:

Średni odstęp między klawiszami i to, jak bardzo się zmienia. Ludzkie pisanie jest nieregularne. W badaniu Dhakala i współpracowników z 2018 roku, obejmującym 168 960 osób, średni odstęp między naciśnięciami wynosił około 239 ms przy odchyleniu standardowym około 112 ms. Skrypt piszący w stałych odstępach nie ma prawie żadnej zmienności; badanie z arXiv z 2025 roku, dotyczące CAPTCHA opartej na naciśnięciach klawiszy, zaobserwowało dokładnie to u swojego testowego bota, który pisał ze stałym opóźnieniem 50 ms. To nasz najsilniejszy sygnał i właśnie na nim potknął się nasz pomocnik.

Odsetek odstępów krótszych niż 40 ms. Utrzymany odstęp 40 ms to 1500 znaków na minutę, czyli 300 WPM przy pięciu znakach na słowo. Palce faktycznie dają pojedyncze tak krótkie odstępy, kiedy nakładają klawisze przy rolloverze, więc jeden krótki odstęp nic nie znaczy. Dziennik, w którym duża część odstępów jest tak krótka, to nie jest pisanie.

Czasy przytrzymania klawiszy. U prawdziwych palców różnią się o dziesiątki milisekund; sztuczne zdarzenia często mają identyczne albo prawie zerowe czasy przytrzymania, bo narzędzie wysyła keydown i keyup jedno po drugim.

Wskaźnik rolloveru. Jak często kolejny klawisz idzie w dół, zanim poprzedni wróci do góry. Dhakal zmierzył średni wskaźnik rolloveru 25%, przy czym większość szybkich osób stosowała rollover przy 40–70% naciśnięć, a klawisze nakładały się średnio o 30 ms. Wolne osoby prawie go nie używają, więc szybki wynik bez rolloveru się wyróżnia. Boty rzadko nakładają klawisze.

Najdłuższa pauza, wahania szybkości z sekundy na sekundę i odsetek odstępów dłuższych niż sekunda. Ludzie wahają się w sposób, który skryptowi trzeba kazać naśladować.

Model punktujący łączy te cechy i może oznaczyć wynik jako podejrzany. Poniżej 130 WPM samo oznaczenie niczego nie odrzuca. Twój wynik nigdy nie jest przed tobą ukryty; te kontrole decydują tylko o tym, czy trafi do rankingu.

Czy oszustwo w teście pisania może przejść kontrole rytmu?

Tak, jeśli oszustwo jest starannie zbudowane. W pracy z arXiv ze stycznia 2026 roku David Condrey przetestował detektory rytmu naciśnięć, które miały odróżniać tekst wpisany przez człowieka od tekstu wygenerowanego przez AI. Całkowicie zautomatyzowane wstrzykiwanie odróżniały bezbłędnie, ale ataki z ludzkim rytmem (człowiek przepisujący tekst AI albo program losujący opóźnienia z danych o ludzkim pisaniu) omijały wszystkie pięć klasyfikatorów w co najmniej 99,8% przypadków. Praca dotyczy wykrywania autorstwa, a nie testów pisania, ale wniosek się przenosi: krok trzeci łapie nieostrożnych i niewiele więcej.

Nasz własny pomocnik testowy pokazuje to samo na małą skalę: losowe drgania i kilka pauz przeniosły go od oczywiście sztucznego do wiarygodnego.

Krok trzeci jest więc filtrem. Werdykt zapada w kroku czwartym.

Krok czwarty: ponowny test weryfikacyjny

Jeśli wynik z testu na czas przekracza 130 WPM, a jego rytm dodatkowo wygląda nietypowo, widzisz go i zostaje zapisany, ale pozostaje poza publicznymi rankingami, dopóki nie zaliczysz ponownego testu weryfikacyjnego. To nowy, 30-sekundowy test, w którym musisz osiągnąć co najmniej 75% deklarowanej szybkości. Jednorazowy fart ani pożyczony dziennik nie przetrwają drugiego podejścia.

Dlaczego 130 WPM? To około dwa i pół raza więcej niż średnia 51,56 WPM w danych Dhakala, wyraźnie powyżej możliwości większości osób, a każdy, kto naprawdę tak szybko pisze, zrobi to dwa razy. Nagły szybki wynik z dziwnym rytmem ma właśnie taki kształt, jaki daje pożyczony dziennik albo skrypt, a jeśli jest uczciwy, jeden dodatkowy test to niewielka cena.

Ponowny test to zwykły test pisania na zwykłym tekście, a nie zniekształcony obrazek ani strona dziwnych symboli. Trudny do odczytania tekst spowalnia wszystkich, a najbardziej spowalnia uczciwe szybkie osoby, dla których oczyszczenia ponowny test istnieje. Weryfikacja, której nie przechodzą uczciwi szybcy, jest gorsza niż żadna. Zwykły tekst sprawia też, że kontrola jest uczciwa: dziennik samego ponownego testu przechodzi te same kontrole rytmu co każdy inny wynik.

Limity i blokady

Liczba przesyłanych wyników jest ograniczona: trzydzieści na minutę na zalogowanego użytkownika, sześćdziesiąt na adres IP. Konto, które raz po raz uruchamia kontrole, dostaje shadow bana, czyli zostaje po cichu ukryte w rankingach, a trzy poważne zdarzenia antycheatowe w ciągu 24 godzin uruchamiają to automatycznie. Liczenie zdarzeń w oknie czasowym oznacza, że jeden dziwny wynik nigdy nie kosztuje cię konta, a skrypt, który zawodzi raz za razem, szybko zostaje zatrzymany.

Rankingi wszech czasów wymagają też 30 minut pisania na koncie, więc nowe konto z jednym idealnym przebiegiem nie może trafić na ich szczyt.

Co powoduje przypadkowe oznaczenie

Większość oznaczonych wyników to nie oszustwa. Uczciwe sposoby na uruchomienie kontroli:

Autokorekta na telefonie. Zamiana przychodzi jako jedno zdarzenie input, które zmienia kilka znaków. Liczymy ją jako jedno naciśnięcie, oznaczamy i trzymamy wynik poza publicznymi rankingami z adnotacją, a nie odrzucamy go.

Wklejony tekst. Wklejanie jest zablokowane, a wynik, w którym ktoś próbował wkleić, jest wyłączony z rankingów.

Przełączanie kart. Jeśli fokus opuści stronę na ponad dwie sekundy w trakcie testu, test zostaje oznaczony jako przerwany; jest zapisany i pokazany, ale nie trafia do rankingu.

Pauzy. Przerwa dłuższa niż pięć sekund w teście na słowa albo z cytatem oznacza wynik jako „z pauzą”. Traktowanie jest takie samo.

Kompozycja IME. Tekst po japońsku, koreańsku i chińsku przychodzi przez zdarzenia composition, więc pomijamy dla nich regułę keydown. Jeśli coś wciąż wygląda źle, to błąd po naszej stronie i chętnie zobaczymy dziennik.

Wyniki offline. Wynik zsynchronizowany ponad dziesięć minut po zakończeniu zostaje w twojej historii bez miejsca w rankingu, bo nie możemy zweryfikować jego zegara.

Bycie naprawdę szybkim. Powyżej 130 WPM trafisz na ponowny test, najpewniej już pierwszego dobrego dnia.

Jak się odwołać

Każde wykluczenie pokazuje w historii swój powód. Jeśli uważasz, że mylimy się co do wyniku albo ograniczenia, napisz na adres do odwołań podany na naszej stronie o zabezpieczeniach przed oszustwami, z adresu przypisanego do konta, podając link do wyniku albo datę i godzinę testu. Człowiek obejrzy powtórkę naciśnięć i odpowie w ciągu kilku dni. O odwołaniach nigdy nie decyduje sam automatyczny model.

Czy właśnie opublikowaliśmy instrukcję, jak przejść kontrole? Po części. Listę cech zawsze dało się odkryć z zachowania, a progi pozostają tajne. Liczy się ponowny test, a sposób na jego zaliczenie to po prostu pisać.

Najczęściej zadawane pytania

Jak testy pisania wykrywają boty?

Dobre testy czytają dziennik naciśnięć: czy za każdym znakiem stoi naciśnięcie klawisza, jak bardzo zmieniają się odstępy między klawiszami i jak klawisze są przytrzymywane i nakładane. Skrypty bywają zbyt regularne; ostrożne boty potrafią naśladować ludzi, dlatego dodajemy ponowny test.

Czy bot może przejść zabezpieczenia testu pisania?

Ostrożny bot może przejść kontrole rytmu: badania detektorów rytmu naciśnięć wykazały, że podrobiony, ludzki rytm omijał je niemal za każdym razem. Dlatego wstrzymujemy szybkie wyniki do ponownego testu, który bot musi zaliczyć jeszcze raz, z drugim dziennikiem przechodzącym te same kontrole.

Dlaczego mój wynik testu pisania nie trafił do rankingu?

Zwykle chodzi o test krótszy niż 15 sekund lub 10 słów, pauzę dłuższą niż pięć sekund, przełączenie karty albo wynik powyżej 130 WPM czekający na ponowny test. Powód znajdziesz w historii.

Źródła