К КраїнаНовини України щогодини

Навіщо капча, коли є математика: український розробник створив невидимий захист

·1274 слівредакція
Навіщо капча, коли є математика: український розробник створив невидимий захист

Fullstack-розробник Андрій втомився від капч із пожежними гідрантами та автобусами. Він створив сервіс KineSec, який перевіряє користувачів непомітно — через обчислення на їхньому пристрої.

Андрій, fullstack-розробник, роками вбудовував у проєкти класичні капчі — і щоразу дратувався. «Сучасному боту вже не обов'язково бути примітивним HTTP-скриптом. Він може працювати через браузер і використовувати vision-моделі для розпізнавання зображень. Тобто виходить, що ми мучимо реальних людей, а від ботів цей захист майже не допомагає», — розповідає він.

Ідея виникла просто з цікавості: а що, якщо не змушувати людину доводити, що вона людина, а перевірити, чи здатен її пристрій виконати криптографічне завдання? Так з'явився KineSec — reverse CAPTCHA, де користувач навіть не помічає перевірки. На сайт додається один скрипт, який збирає мінімум даних про середовище, виконує обчислення у фоновому режимі та підставляє токен у форми.

На практиці все виявилося складніше. Спочатку скрипт не працював із динамічними формами в React — токен просто не встигав потрапити в DOM. Довелося використати MutationObserver, який відстежує появу нових форм. Друга проблема — користувачі не хочуть проходити перевірку двічі. Рішення — кешування токена в localStorage на 10 годин. Але це лише для зручності: сервер незалежно перевіряє кожен токен, підписаний JWT і прив'язаний до домену та IP.

Окремо Андрій додав режим Anti-Human — він блокує запити, якщо система бачить «занадто людську» поведінку: рухи миші, скрол, кліки. Ідея виникла випадково, коли він задумався про API для ШІ-агентів, де бажані саме машини. «Звучить трохи абсурдно: „Ми блокуємо людей, бо вони поводяться як люди“. Але технічно це просто інший набір правил», — каже розробник.

Зараз KineSec працює на кількох продакшн-сайтах. Андрій планує додати WebSocket-аналітику, розширити типи криптографічних завдань і використати WebGL для перевірки. «Безпека — це завжди компроміс. Немає ідеального захисту, є захист, який достатньо дорого обійти», — підсумовує він.

Читайте також