Детектим ботов на javascript в браузере
Понадобилось мне на работе ловить ботов и другие автоматизированные системы для общения с сайтом, после изучения вопроса, выяснилось, что особого лекарства нет, есть несколько подходов к проверке и я решил их собрать в одном месте. В основе лежат следующие подходы:
- Проверка userAgent — просто парсим пользовательский userAgent на наличие всяких bot\phatnom\crawler и т.п. Самое крупное решение доступное на разных языках\платформах это crawler.io. Также крутой парсер UAParser.
- Также мы можем проверять из браузера окружение в котором мы запущены с помощью разных «хаков» и обращения к тем свойствам, которые недоступны в обычном браузере. Например window._phantom !== undefined, набор проверок для phantomjs\node\coach\rhino\webdriber\selenium я собрал в один gist.
- Проверять поведенческие факторы. движение мышки, скорость ввода, скорость реакции на alert. Т.к. эти методы работают только на временном отрезке, они не подойдут для мгновенной синхронной валидации.
Буду рад, если кто-то дополнит или подскажет иные методы детекта.
Используемые источники:
- http://vamsoft.com/downloads/articles/vamsoft-headless-browsers-in-forum-spam.pdf
- http://www.freepatentsonline.com/y2016/0359904.html
- https://blog.shapesecurity.com/2015/01/22/detecting-phantomjs-based-visitors/