Тести швидкості друку виявляють шахрайство, перевіряючи журнал натискань за кожним результатом. Наш перераховує кожен результат із журналу натискань, перевіряє хеш, структуру журналу й ритм, а будь-який результат на час понад 130 WPM, ритм якого до того ж виглядає незвично, не потрапляє до загальних таблиць, доки ти не пройдеш повторний тест. Перевірки ритму ловлять недбалих ботів; повторний тест змушує ретельного бота пройти все ще раз.
Першим ботом, який обійшов наші перевірки ритму, був наш власний.
Наш помічник для наскрізних тестів натискав клавіші з фіксованим інтервалом 40 мс, бо саме так робить тестовий скрипт. Сервер перерахував результат, підтвердив хеш і позначив заїзд як підозрілий: нульова варіація між натисканнями, жодного перекриття, однаковий час утримання. Нам довелося додати випадкове тремтіння для кожного слова й час від часу паузи «на роздуми» від 80 до 300 мс, перш ніж наш власний набір тестів зміг надіслати результат, схожий на людський. Цей параметр досі є в коді й називається humanLike.
Перевірки працюють проти всього, що не намагається їх обійти, а все, що намагається, може їх пройти, тож справжню вагу конструкція покладає на повторний тест.
Крок перший: перерахувати все
Твій браузер не надсилає нам WPM. Він надсилає журнал натискань (кожну подію keydown, keyup, input і composition з позначкою часу за монотонним годинником performance.now()), обчислені ним метрики та хеш SHA-256 канонічного результату.
Сервер проганяє той самий код метрик на журналі й порівнює. Якщо будь-яка цифра відрізняється більш ніж на 0,01, результат відхиляється як metrics_mismatch. Якщо хеш не збігається, він відхиляється як hash_mismatch. Розширення браузера, яке редагує поле WPM, — найпоширеніший спосіб шахрайства на сайтах, що довіряють клієнту, — тут провалюється. Ті самі функції дають цифру на твоєму екрані й у базі даних, тому наша сторінка про метрики може обіцяти, що її розібраний приклад відтворюється з точністю до двох знаків після коми.
Чому б не засікати час тесту на сервері? Тоді твій результат включав би мережу. Кожне натискання доходило б до нас трохи пізніше, на величину, що залежить від твого з'єднання, і швидкий друкар на повільній лінії втрачав би швидкість, яку він насправді мав. Журнал дає нам годинник клієнта для точності й перерахунок на сервері для чесності.
Крок другий: чи має журнал сенс?
Перед будь-яким аналізом ритму — прості перевірки форми надісланого:
- Тест має тривати щонайменше 15 секунд або 10 слів. Коротші заїзди надто шумні для рейтингу й найлегше піддаються накрутці.
- Результат не може надійти раніше, ніж тест міг закінчитися: його початок плюс його власна тривалість. 60-секундний результат, що надійшов через двадцять секунд після початку, не відбувся.
- Кількість подій має відповідати кількості надрукованих символів.
- На комп'ютері кожна подія input має йти за keydown у межах 50 мс. Це ловить вставлений текст, програмно згенеровані події input і більшість інструментів для впорскування натискань, які видають текст без фізичної клавіші. Друк через редактор методу введення (IME composition) звільнено від цього правила, а результати з телефона не потрапляють до загальних таблиць.
- Журнал без початку, без кінця або з немонотонними позначками часу вважається пошкодженим і одразу відхиляється.
Нічого хитромудрого тут немає, але це прибирає більшу частину потоку.
Крок третій: що може розкрити ритм натискань?
Цю частину ми свідомо не документуємо повністю: перелік ознак публічний, пороги й ваги — ні. Опублікований поріг — це мішень. Якби ми сказали «позначається стандартне відхилення менше N мілісекунд», наступна версія кожного скрипта додала б N плюс один. Ознаки, які ми оцінюємо:
Середній інтервал між клавішами і те, наскільки він змінюється. Людський друк нерегулярний. У дослідженні Дхакала й колег 2018 року, що охопило 168 960 друкарів, середній інтервал між натисканнями становив близько 239 мс зі стандартним відхиленням близько 112 мс. Скрипт, що друкує з фіксованим інтервалом, майже не має варіації; дослідження CAPTCHA на основі натискань, опубліковане на arXiv у 2025 році, побачило саме це у своєму тестовому боті, який друкував із фіксованою затримкою 50 мс. Це наш найсильніший сигнал, і саме на ньому спіткнувся наш помічник.
Частка інтервалів менше 40 мс. Інтервал 40 мс, якщо його тримати, — це 1 500 символів за хвилину, або 300 WPM при п'яти символах на слово. Пальці таки дають окремі такі короткі інтервали, коли перекривають клавіші під час rollover, тож один короткий інтервал нічого не означає. Журнал, де велика частка інтервалів така коротка, — це не друк.
Час утримання клавіш. У справжніх пальців він різниться на десятки мілісекунд; у синтетичних подій час утримання часто однаковий або майже нульовий, бо інструмент видає keydown і keyup одне за одним.
Частка перекриттів (rollover). Як часто наступна клавіша опускається до того, як піднялася попередня. Дхакал виміряв середню частку перекриттів 25%, причому більшість швидких друкарів перекривала натискання в 40–70% випадків, а клавіші накладалися в середньому на 30 мс. Повільні друкарі майже не перекривають, тож швидкий результат без перекриттів впадає в око. Боти рідко перекривають клавіші.
Найдовша пауза, коливання швидкості від секунди до секунди й частка інтервалів понад одну секунду. Люди вагаються так, як скрипту треба окремо наказати імітувати.
Модель оцінювання поєднує ці ознаки й може позначити результат як підозрілий. Нижче 130 WPM позначка сама собою нічого не відхиляє. Твій результат ніколи не приховується від тебе; ці перевірки вирішують лише, чи потрапить він до рейтингу.
Чи може шахрайство в тесті друку обійти перевірки ритму?
Так, якщо обман зроблено ретельно. Стаття Девіда Кондрі на arXiv у січні 2026 року перевіряла детектори ритму натискань, які мали відрізняти текст, надрукований людиною, від згенерованого ШІ. Вони ідеально відокремлювали повністю автоматичне впорскування, але атаки з людським ритмом (людина передруковує текст ШІ або програма бере затримки з даних людського друку) обходили всі п'ять класифікаторів щонайменше в 99,8% випадків. Стаття про виявлення авторства, а не про тести друку, але урок переноситься: третій крок ловить недбалих і майже нікого більше.
Наш власний тестовий помічник показує те саме в малому масштабі: випадкове тремтіння й кілька пауз перетворили його з очевидно синтетичного на правдоподібного.
Тож третій крок — це фільтр. Вердикт дає четвертий.
Крок четвертий: перевірний повторний тест
Якщо результат на час вищий за 130 WPM, а його ритм до того ж виглядає незвично, ти його бачиш і він зберігається, але не потрапляє до загальних таблиць, доки ти не пройдеш перевірний повторний тест. Це новий 30-секундний тест, і тобі потрібно досягти щонайменше 75% заявленої швидкості. Випадкова вдача чи позичений журнал другого заїзду не переживуть.
Чому 130 WPM? Це приблизно в два з половиною рази більше за середні 51,56 WPM у даних Дхакала, далеко за межами можливостей більшості друкарів, і хто справді друкує так швидко, зможе зробити це двічі. Раптовий швидкий результат із дивним ритмом — це саме той вигляд, який дає позичений журнал або скрипт, а якщо результат чесний, один додатковий тест — невелика ціна.
Повторний тест — це звичайний тест швидкості друку на звичайному тексті, а не спотворене зображення чи сторінка дивних символів. Важкочитаний текст сповільнює всіх, а найбільше — тих чесних швидких друкарів, заради яких повторний тест і існує. Перевірка, яку провалюють чесні швидкі друкарі, гірша, ніж жодної. Звичайний текст також робить перевірку справедливою: журнал самого повторного тесту проходить ті самі перевірки ритму, що й будь-який інший результат.
Обмеження частоти й блокування
Кількість надсилань обмежено: тридцять за хвилину на користувача, який увійшов, шістдесят на IP-адресу. Обліковий запис, який раз у раз спрацьовує на перевірки, отримує тіньове блокування — його тихо приховують із таблиць, — і три серйозні події захисту від шахрайства за 24 години вмикають це автоматично. Підрахунок подій у часовому вікні означає, що один дивний результат ніколи не коштуватиме тобі облікового запису, а скрипт, який провалюється знову й знову, швидко зупиняється.
Таблиці лідерів за весь час також вимагають 30 хвилин друку на обліковому записі, тож новий обліковий запис з одним ідеальним заїздом не може їх очолити.
Через що тебе можуть позначити випадково
Більшість позначених результатів — не шахрайство. Чесні способи спрацювати на перевірку:
Автовиправлення на телефоні. Заміна надходить як одна подія input, що змінює кілька символів. Ми рахуємо її як одне натискання, позначаємо й тримаємо результат поза загальними таблицями з приміткою, а не відхиляємо.
Вставлений текст. Вставлення заблоковано, а результат, де була спроба вставлення, виключається з таблиць.
Перемикання вкладок. Якщо фокус залишає сторінку довше ніж на дві секунди під час тесту, тест позначається як перерваний; він зберігається й показується, але не ранжується.
Паузи. Інтервал понад п'ять секунд у тесті на слова чи цитату позначає результат як призупинений. Те саме ставлення.
IME composition. Японське, корейське й китайське введення надходить через події composition, тож для них ми пропускаємо правило keydown. Якщо щось усе одно виглядає неправильно, це помилка, і ми хотіли б отримати журнал.
Результати офлайн. Результат, синхронізований пізніше ніж через десять хвилин після завершення, лишається в твоїй історії без рейтингу, бо ми не можемо перевірити його годинник.
Справжня швидкість. Понад 130 WPM ти зустрінеш повторний тест, найімовірніше — у свій перший вдалий день.
Як оскаржити
Кожне виключення показує свою причину у твоїй історії. Якщо вважаєш, що ми помилилися щодо результату чи обмеження, напиши на адресу для оскаржень, указану на нашій сторінці про захист від шахрайства, з адреси твого облікового запису, додавши посилання на результат або дату й час тесту. Людина переглядає відтворення натискань і відповідає протягом кількох днів. Оскарження ніколи не вирішує сама лише автоматична модель.
Чи не опублікували ми щойно інструкцію з обходу перевірок? Частково. Перелік ознак завжди можна було вивести з поведінки, а пороги лишаються закритими. Важить повторний тест, а спосіб його пройти — друкувати.
Часті запитання
Як тести швидкості друку виявляють ботів?
Добрі тести читають журнал натискань: чи стоїть за кожним символом натискання клавіші, наскільки різняться інтервали між клавішами, як клавіші утримуються й перекриваються. Скрипти зазвичай надто рівні; ретельні боти можуть імітувати людей, тому ми додаємо повторний тест.
Чи може бот обійти захист від шахрайства в тесті друку?
Ретельний бот може пройти перевірки ритму: дослідження детекторів ритму натискань виявило, що підроблений людиноподібний ритм обходив їх майже щоразу. Тому ми затримуємо швидкі результати до повторного тесту, який бот має пройти ще раз із другим журналом, що проходить ті самі перевірки.
Чому мій результат тесту друку не потрапив до рейтингу?
Зазвичай через тест коротший за 15 секунд або 10 слів, паузу понад п'ять секунд, перемикання вкладки або результат понад 130 WPM, що чекає на повторний тест. Твоя історія показує причину.