Как обнаружить скликивающих Яндекс.Директ ботов анализируя движения мышки?
Всё усложнилось с появлением браузеров, работающих в headless-режиме, то есть браузеров, которые управляются при помощи скриптов и могут взаимодействовать с веб-страницей точно так же, как обычный пользователь. Хотя можно легко запрограммировать браузер на взаимодействия с сайтом при помощи мыши, сделать их похожими на действия человека — непростая задача. Таким образом, проблема обнаружения бота изменилась: если раньше нужно было просто проверить, использовалась ли мышь при взаимодействии с сайтом, то теперь нужно пытаться определить, похоже ли поведение пользователя сайта на поведение человека или бота.
Анализ трех вариантов перемещения мыши
В этой статье мы рассмотрим три типа выполненных ботом перемещений мыши и обсудим, как их можно автоматически распознать. Чтобы было с чем сравнивать, в каждом из представленных ниже примеров одно движение выполнено ботом, а другое человеком. Посмотрим, сможете ли вы догадаться, где какое!
Первый пример перемещения курсора ботом
Вот наша первая пара примеров, в которой одни движения мыши выполнены человеком, а другие — ботом. Чтобы отследить эти движения мыши, используется внутреннее событие mousemove, которое фиксируется во всех современных браузерах. Каждая точка в траекториях ниже отмечает положение указателя мыши во время наступления события mousemove. Можно ли определить, что траекторию 1A или 1B оставил бот?
Конечно можно, ведь здесь всё очевидно! Если только вы не бот, думаю, вы согласитесь, что траектория 1A выглядит подозрительно. Однако многие простые боты и в самом деле перемещают курсор мыши примерно так, как показано на 1A. Причина формирования подобных траекторий заключается в том, что при программировании поведения бота проще всего перемещать курсор мыши простым указанием координат, в которых он должен побывать. Такой подход приводит к «невозможным для человека» перемещениям указателя мыши, когда он мгновенно перескакивает от одного положения к другому. Тогда как человек перемещает указатель, физически двигая мышь рукой, поэтому образуются относительно плавные траектории, для которых характерно большое количество событий mousemove.
Простой подход к обнаружению ботов, например как в случае 1A, состоит в подсчете количества зафиксированных событий mousemove и маркировке тех взаимодействий пользователя с мышью, в которых это количество до невозможного низкое. Обычно если количество событий не измеряется сотнями, то такое поведение считается подозрительным. На изображенных выше траекториях перемещение курсора мыши человеком привело к появлению 378 событий mousemove, а перемещение курсора ботом — всего четырех.
Второй пример перемещения курсора ботом
Какая из двух представленных ниже траекторий принадлежит боту?
К счастью, здесь тоже всё просто. Но в этот раз бот из примера 2B хотя бы попытался быть похожим на человека. Как вы уже догадались, самый простой способ запрограммировать бота на перемещение курсора мыши — заставить его перемещать курсор по прямым линиям. И хотя прямые линии легко распознать визуально, разработать правило автоматического обнаружения бота — более сложная задача. Прежний подход с подсчетом количества событий mousemove здесь уже не сработает, поскольку и в 1A, и в 1B приблизительно 120 таких событий.
При помощи конструирования признаков можно приблизиться к решению задачи обнаружения бота по траектории курсора мыши. Но сначала полезно будет узнать, что понимается под перемещением курсора мыши по прямой линии. Это вопрос из области не философии, а физики. Перемещение по прямой линии означает перемещение с постоянной скоростью, то есть с нулевым ускорением. На графике ниже показано положение, скорость и ускорение по оси X для траектории человека (2A) и бота (2B).
Здесь можно видеть, что при прямолинейном движении курсора у него постоянная скорость и нулевое ускорение, за исключением периодов, когда бот меняет направление движения. Такое ускорение курсора мыши сильно отличается от ускорения, характерного для человека, — у человека оно практически никогда не бывает нулевым или почти нулевым. Из этого наблюдения можно вывести еще одно простое правило обнаружения бота: если ускорение курсора мыши почти всегда равно нулю, то, скорее всего, курсором управляет бот.
Третий пример перемещения курсора ботом
Последний тест. Какая из траекторий ниже создана ботом?
На этот раз определить будет сложнее! Оба примера включают в себя множество событий mousemove и плавные кривые линии вместо прямых. Может быть, даже слишком плавные?
В то время как траекторию на 3B можно назвать зигзагообразной, беспорядочной и характерной для человека, кривые на 3A созданы ботом с использованием кривых Безье. Эти кривые стали популярными благодаря французскому инженеру Пьеру Безье и широко используются в компьютерной графике. Траектории курсора мыши, созданные с применением этих кривых, гораздо сложнее отличить от характерных человеку траекторий как визуально, так и используя правила обнаружения ботов. Однако при помощи сочетания более продуманного конструирования признаков и машинного обучения можно выявлять в том числе ботов таких типов.
Чтобы защитить свой сайт от регистрации спамеров и попыток кражи учетных записей, важно иметь возможность отфильтровывать действия на сайте, которые осуществляются ботами, а не настоящими, живыми пользователями. Хотя боты постоянно становятся более продвинутыми, им всё еще можно помешать притворяться обычными пользователям — в этом поможет конструирование признаков вкупе с машинным обучением.
Что мешает записать библиотеку движений мышью реальных пользователей на живом сайте и потом рандомно подставлять её ботам. При ручной проверке можно будет определить, что посетитель двигает мышкой не в сторону элементов на странице, а при автоматической уже нет, ведь движения взяты органические.
Вечная гонка вооружений.
движения мышкой отличаются сайт к сайту, ввиду навигации. боту сложно это дело повторить