Как боты рисуют “живые” движения мыши и почему тайминг их выдаёт за 3 события
Давайте поднимем логи и посмотрим правде в глаза: поведенческий фрод почти всегда палится не по «кривой» траектории, а по синхронизации. Бот может вести курсор по Bézier-кривой, делать микрозадержки и случайные скроллы, но у него ломается связка между input, DOM и сетевыми запросами.
Смотрите на три слоя:
• pointermove/scroll идут сериями с одинаковым интервалом, будто их генерит таймер, а не рука
• viewport-change и visibilitychange не совпадают с реальным чтением: страница “просмотрена”, но событий фокуса ноль
• после перехода между страницами слишком ровные dwell time и одинаковый depth scroll, без отклонений на интерактивных блоках
Дальше — fingerprint на уровне браузерного ядра. Ботнеты эволюционируют, но паттерны их поведения остаются прежними: неестественная согласованность между clientX/clientY, скоростью прокрутки и временем до первого клика. У человека есть дрожание, паузы на элементах, возврат к ранее просмотренному блоку. У скрипта — гладкая линия и стерильная статистика.
Практика фильтрации простая: собирайте не только сырые события, но и производные признаки — variance по интервалам, entropy по направлениям движения, ratio активных окон к времени на странице, количество “мертвых” сессий без mouseup/keydown. Если 2–3 признака совпали, сессию надо не банить вслепую, а уводить в карантин на дополнительную верификацию.
Вот технический разбор того, как именно уплывает ваш рекламный бюджет: бот имитирует человека ровно настолько, чтобы пройти поверхностный чек, но ломается на корреляциях. Ищите не картинку движения, а статистику поведения — там подделка всегда оставляет след.
Защита от фрода в рекламе
@ad_fraud_shield_arb
Как боты рисуют “живые” движения мыши и почему тайминг их выдаёт за 3 события
Этот пост опубликован в Telegram-канале Защита от фрода в рекламе. Подписаться можно по ссылке: @ad_fraud_shield_arb.