Как распознать ботов на сайте через заголовки сервера?

Год за годом интернет все больше наполняется разного рода ботами, которые посещают сайты в зловредных целях. В результате "нагула" ботов падают позиции сайта в Яндекс и Google, повышается стоимость конверсии в Яндекс Директ и растет нагрузка на сервера.

Октябрь 2024 года. Попросил ИИ написать текст для генерации картинки в другом ИИ про то, как ИИ взламывает программный код.
Октябрь 2024 года. Попросил ИИ написать текст для генерации картинки в другом ИИ про то, как ИИ взламывает программный код.

На связи Дмитрий из firemarketing.ru. Хочу поделиться опытом, как мы собирали список ботов на сайтах клиентов и настраивали свою собственную антифрод-систему.

Как распознать ботов

Существуют разные способы распознания, как серверные, так и браузерные. В этой статье хочу раскрыть, как мы собирали ботов именно через заголовки сервера.

Заголовки сервера - это некая записка, хранящая информацию о том, откуда пришел запрос. В них содержатся данные об устройстве, операционной системе, браузере, IP-адресе и многом другом. При анализе заголовков можно выявить разные механизмы поведения ботов и предпринять меры против них.

По умолчанию отслеживание заголовков не настроено ни на одном сайте - это дополнительное решение, которое надо добавлять на уровне кода или хостера (если такой инструмент у него имеется).

1. Подозрительные User Agent

Некоторые боты намеренно оставляют свое название в заголовках сервера, чтобы при анализе данных их можно было идентифицировать. Помимо названия, такие боты часто оставляют ссылку на описание алгоритмов своей работы в надежде принести какую-то пользу владельцу сайта и избежать блокировки. В некоторых случаях это может работать, потому что боты бывают и полезные. Вдруг вебмастер сжалится и не будет блокировать программу…

В User Agent видно много ботов с именами и ссылками на описание своей работы.
В User Agent видно много ботов с именами и ссылками на описание своей работы.

2. Подозрительные страницы входа

Еще одним распространенным поведением бота является попытка доступа к несуществующим страницам сайта. Один раз открыть страницу с неправильным URL может и человек. А если запросы поступают один за другим с разницей в несколько секунд, то это могут быть только мошеннические действия.

Как правило, боты ищут популярные адреса страниц на популярных движках - WordPress 1С-Битрикс и другие. Например, большинство сайтов на WordPress имеют доступ в админку по адресу "example.com/wp-login.php".

По этому адресу расположена форма для ввода логина и пароля, поэтому при отправке запросов на эту страницу можно методом подбора получить доступ в панель администратора.

Если сайт сделан не на WordPress, на Битрикс и не на других популярных платформах, то тех, кто пытался открыть такие страницы, можно смело блокировать. Блокировка по IP адресу вряд ли поможет, так как они могут меняться, но для этого мы и собираем все заголовки сервера - закономерность можно увидеть в чем-то другом.

На этом сайте не стоит WordPress или Битрикс, поэтому обращаться к таким страницам и файлам человек не мог
На этом сайте не стоит WordPress или Битрикс, поэтому обращаться к таким страницам и файлам человек не мог

3. Методы запроса

Запрос на открытие страницы всегда реализуется каким-то методом. Стандартное открытие страницы через адресную строку или клик по ссылке - это метод GET. У ботов иногда можно увидеть метод POST (используется для отправки форм) или HEAD (используется для проверки статуса сайта, без нужды в получении его содержимого).

Реальные пользователи могут открыть страницу только через GET. На остальное нужны специальные программы. Можно собрать информацию о найденных попытках открыть сайт другим способом и заблокировать доступ как на уровне проверки метода, так и на уровне других паттернов по совпадению.

Если принимать радикальные меры в блокировке всех POST запросов, то делать это следует очень аккуратно, так как через POST могут отправляться формы на сайте или передаваться данные по API с других ресурсов.

Выгрузил в таблицу примеры запросов с POST и HEAD методами
Выгрузил в таблицу примеры запросов с POST и HEAD методами

4. Активность в браузере

Мы для проверки на роботность поставили на сайты несложный скрипт, который проверяет, была ли активность на сайте в течение хотя бы 5 секунд.

Работает это в три шага:

  1. Сервер генерирует пользователю случайный ID и передает его в браузер.

  2. Браузер спустя 5 секунд после загрузки страницы передает на сервер отметку, что по этому ID была 5-секундная активность.

  3. При открытии любых других страниц ID не генерирует заново. Вместо этого считается счетчик числа просмотренных страниц.

Как показали цифры, огромное количество визитов этот тест не проходят. Конечно, это могут быть и люди, которые просто случайно зашли на сайт и быстро вышли. Но можно выгрузить в таблицу все провалы 5-секундного теста и проверить, с каких IP-адресов, устройств и операционных систем такие запросы поступали.

Те же визиты, что и на предыдущем скриншоте. Все боты с POST и HEAD запросами не дошли до прогрузки страницы в браузере. 
Те же визиты, что и на предыдущем скриншоте. Все боты с POST и HEAD запросами не дошли до прогрузки страницы в браузере. 

5. Частота запросов

Как часто один и тот же человек может подавать запросы на сервер? Может ли он за 6 минут открыть сайт с 8 разных устройств? Скорее всего, не может. А боты могут.

Исследование частоты запросов навело на еще один способ распознания бота, описанный ниже.

За 4 минуты было 6 запросов с одного IP-адреса. Каждый запрос не прошел тест на 5 секунд активности.
За 4 минуты было 6 запросов с одного IP-адреса. Каждый запрос не прошел тест на 5 секунд активности.

6. Подмена User Agent с одним IP-адресом

При анализе большого объема данных я заметил еще одну интересную вещь. Иногда прилетают запросы с одного и того же IP-адреса, но с разными браузерами и операционными системами.

Может ли человек зайти на сайт сначала с iPad, потом с iPhone, потом с двух разных Android, и потом с двух разных Windows, сохранив при этом один и тот же IP-адрес? Пока мир окончательно не чипировался, это что-то из ряда фантастики.

Конечно, все эти устройства могут быть в теории подключены к одной сети и посылать запросы с одного IP-адреса, но какой должен быть мотив у человека, чтобы открыть один и тот же сайт с разных устройств в течение 3-4 минут и ни разу не пройти 5-секундный тест?

С одного IP адреса были запросы якобы с iPad, iPhone, двух андроидов и двух устройств на Windows. Все не прошли 5-секундный тест. Блокировать IP адрес бесполезно, надо искать другие зацепки. 
С одного IP адреса были запросы якобы с iPad, iPhone, двух андроидов и двух устройств на Windows. Все не прошли 5-секундный тест. Блокировать IP адрес бесполезно, надо искать другие зацепки. 

7. Android-приложения с Dalvik

Я не специалист по разработке на Android, но пришлось "нагуглить".

Dalvik - это виртуальная машина для Android-приложений. В редких случаях в User Agent можно заметить заголовки, начинающиеся не с "Mozilla", а с "Dalvik". Это говорит о том, что запросы к сайту были отправлены не через популярные браузеры типа Safari, Chrome или Яндекса. Dalvik - это запросы на сайт, отправленные через виртуальную машину на Android. Выглядит это очень странно, так как большинство пользователей заходят на сайт через браузеры.

Допустим, есть приложения на Android, через которые заходить на сайт действительно выгоднее, чем через браузер (нет). Можно дополнительно посмотреть, какие заголовки были еще отправлены сервером и не было ли там подозрительной активности.

В моем случае все переходы с Dalvik не прошли 5-секундный тест на активность, поэтому реальных людей было ноль. Пока не стал включать Dalvik в черный список, так как нужно больше данных, но на вооружение этот вопрос взял.

И да, на скриншот ниже видно, что абсолютно все визиты c Dalvik были с utm_source=yandex. Очень похоже на скликивания контекстной рекламы, которые делались через софт на Android.

Техподдержка Яндекс Директа не дала внятного ответа на вопрос о том, почему за клики от таких ботов списывались деньги со счета.

Визиты с Anrdoid-приложения на Dalvik с активностью в 0 секунд и переходом с клика в контекстной рекламы
Визиты с Anrdoid-приложения на Dalvik с активностью в 0 секунд и переходом с клика в контекстной рекламы

Списки полезных и вредных ботов по User Agent

Собрал воедино список всех ботов, которых мы нашли на клиентских сайтах.

Полезные боты

Некоторых отсюда убрал из-за неактуальности в РФ в силу санкций. Например, "Mediapartners-Google". Этот бот проверяет сайты, которые регистрируются в сети Google Adsense (заработок вебмастеров на рекламе). Реклама Google в РФ не работает вообще никакая, поэтому сайтам в зоне .ru это неактуально.

  • Yandex - не один бот, а сразу больше 30. У каждого из них в названии после "Yandex" свое окончание. У Яндекса есть официальная документация, в которой описываются задачи каждого бота и способы проверки официального адреса, чтобы определить реального бота от подделки.
  • Googlebot - поисковый робот Гугла. Индексирует сайты и выставляет позиции в выдаче.
  • FeedBurner - тоже робот Гугла. Считывает содержимое блогов для вставки в новостную ленту. - тоже робот Гугла. Считывает содержимое блогов для вставки в новостную ленту.
  • CriteoBot - бот компании Criteo, который проверяет сайты на соответствие маркетинговым целям. Относится к полезным, так как по некоторой информации этим ботом пользуется Яндекс
  • Twitterbot - как следует из названия, робот Twitter. Собирает содержимое для показа расширенных описаний страниц.
  • vkShare - робот ВК. Собирает подробную информацию о сайте при размещении ссылки в самом ВК. Может собирать для проверки достоверности данных, а может для улучшения визуального восприятия сниппета.
  • Mail.RU_Bot - бот для поисковой индексации в Mail.ru. Нужна вам индексация в Мэйле или нет - вопрос индивидуальный. Бот остается полезным.
  • BingBot - бот для поисковой индексации в Bing. Поисковая система не сильно популярна в СНГ, но у бота благие намерения.
  • PinterestBot - Сканер Pinterest. Изучает сайты и добавляет изображения в свою социальную сеть. Также может использоваться для проверки ссылок, которые пользователи Pinterrest оставляют в пинах.
  • Slurp - Поисковый робот Yahoo. Анализиурует сайты для индексации в своей поисковой системе.
  • FeedBurner - тоже робот Гугла. Считывает содержимое блогов для вставки в новостную ленту.
  • CriteoBot - бот компании Criteo, который проверяет сайты на соответствие маркетинговым целям. Относится к полезным, так как по некоторой информации этим ботом пользуется Яндекс.
  • Twitterbot - как следует из названия, робот Twitter. Собирает содержимое для показа расширенных описаний страниц.

Да и все на этом! Теперь перейдем к более большому списку "вредных" ботов.

Вредные боты

  • wpbot - ищет страницы WordPress на сайте. При нагугливании не совсем понятно, чем именно бот занимается, но активность подозрительная. Возможно, ищутся все сайты нв WordPress в интернете, чтобы потом было понятно, кого взламывать.

  • GuzzleHttp - Библиотека PHP для удобной отправки запросов на сторонние сайты. Как правило, для сбора данных.

  • Konturbot - Бот kontur.ru. Собирает коммерческие данные.

  • BlackWidow - Программа для сканирования содержимого страниц.

  • bidswitchbot - предопложительно, инструмент маркетологов для анализа данных на сайтах.

  • SurdotlyBot - Сервис, позволяющий подменять внешние ссылки на сайте так, чтобы при переходе по ссылке пользователь не покидал ваш домен. Польза сомнительная, но если не пользуетесь, то лучше в блок.

  • BackupLand - бот одноименного сервиса, который делает бэкапы сайтов и собирает их в своей базе данных.

  • Iframely - Бот сервиса Iframely собирает контент страниц для дальнешей передачи этих данных в новостные издания, блоги и т.д. Так сказано на их официальном сайте. Есть еще одноименный плагин на WordPress.

  • Palo Alto Networks - Подписывается так: Expanse, a Palo Alto Networks company, searches across the global IPv4 space multiple times per day to identify customers & presences on the Internet.

  • Dataprovider.com - краулер компании Dataprovider.com. Собирает базу данных о сайтах по более 200 параметрам. На основе собранных данных предлагает свои аналитические услуги.

  • America Online Browser - еще один бесполезный браузер в СНГ, который собирает сайты и добавляет в базу.

  • MixRank - сервис предоставляет аналитику поведения посетителей сайтов.

  • Mj12bot - бот поисковой системы Majestic. Собирает данные для добавления сайтов к себе в выдачу. В СНГ не пользуется спросом, но запросы может посылать часто.

  • DuckDuckBot - сканер поисковой системы DuchDuckGo. Если не стоит задач продвигать сайт в этой поисковое системе, то лучше блокировать робота, так как запросы может посылать очень часто.

  • Barkrowler - собирает данные для машинного обучения. Создает лишнюю нагрузку, поэтому лучше в блок.

  • AwarioSmartBot и AwarioRssBot - Собирает и обновляет данные о сайтах в коммерческих целях.

  • axios - бот языка Node.js, который посылает запросы к файлу ads.txt (при наличии такового).

  • l9scan - сервис по обеспечению защиты сайтов. Посылает периодические запросы и создает лишнюю нагрузку. Блокировать.

  • Go-http-client - бот, который ищет уязвимости на сайте. Обращается к разным страницам и пытается найти среди них технические и серверные файлы. Опасно, лучше блокировать.

  • GPTBot - куда ж без него. Бот компании OpenAI. Собирает данные для обучения ChatGPT. Если не стоит задача обязательно попасть в текстовую выдачу ChatGPT, то можно блокировать боту доступ.

  • Bytespider - AI-модель компании ByteDance (создатель TikTok). Собирает информацию о сайтах для обучения ИИ-алгоритмов ТикТока.

  • ZoominfoBot - бот аналитической платформы Zoominfo, которая предоставляет "полезные" инструменты для бизнеса. Для реализации своих задач спамит сайты запросами и собирает информацию.

  • FlipboardRSS - бот проекта Flipboard (не сильно популярной ленты новостей). Толку мало, а нагрузку на сайт может создавать большую.

  • FlipboardProxy - тоже Flipboard. Собирает информацию о том, как выглядит сайт.

  • Scrapy - парсер данных со сторонних сайтов. Может запускаться разработчиками и аналитиками, как добросовестными, так и нет.

  • SafeDNSBot - Бот SafeDNS. Предоставляет услуги защиты сайтов от кибератак. Спамит сайт обращениями с непонятной целью.

  • GetIntent - AI платформа, которая проводит аналитику сайтов.

  • Cloudfind - бот одноименного проекта. Ищет потенциальных партнеров для партнерского маркетинга.

  • niraiya.com - Проверяет сайт на утечки паролей и продает данные.

  • YaK - Бот компании LinkFluence. Собирает статистические данные в коммерческих целях.

  • MBCrawler - Бот проекта MonitorBacklinks. Собирает входящие ссылки на сайт, чтобы показывать эту информацию SEO-специалистам. Может создавать большую нагрузку.

  • BLEXBot - собирает данные о сайтах для коммерческой продажи.

  • NetcraftSurveyAgent - Толковое описание бота найти не удалось, но Netcraft - это зарубежная компания, занимающаяся обеспечением кибербезопасности. Получается, что SurveyAgent - это их исследовательский сканер, который собирает информацию о сайтах в интернете.

  • DotBot - Бот сервиса Moz. Собирает информацию о сайтах для SEO и маркетинга.

  • ImagesiftBot - Сканер изображений на сайте. Ищет ключевые фразы и атрибуты alt в картинках в коммерческих целях. Может запускаться для поиска ключевых фраз конкурентами.

SEO боты

Выделил в отдельную категорию ботов, принадлежащих разным сервисам SEO оптимизации, так как польза или вред от них - понятие относительное.

Боты различных SEO сервисов периодически посылают запросы к сайту для того, чтобы собирать данные о качестве оптимизации сайтов и предоставлять их всем желающим. Пользоваться этими данными может как сам владелец сайта, так и конкуренты (например, для сбора статистики по ключевым фразам или анализа ссылочного профиля).

Как правило, SEO оптимизаторы пользуются 1-2 сервисами, но не всеми сразу. Соответственно, для своих любимых сервисов доступ можно оставить, а всем остальным доступ можно закрыть, чтобы не нагружать сервер лишними запросами и не давать почву для анализа конкурентам.

  • SemrushBot - сканер SEO-сервиса Semrush. Он не работает в РФ из-за санкций, но данные все равно собирает. Запросы на сайт можно увидеть вне зависимости от того, пользуетесь ли вы сервисом или нет.

  • MegaIndex - сканер одноименного сервиса. Платформа неплохая и достаточно функциональная, но если не пользуетесь, то доступ этому боту можно закрыть.

  • MJ12bot - бот сервиса Majestic, который позволяет проводить аналитику обратных ссылок на сайт.

  • Seopult - Еще один сервис для анализа сайтов на SEO настройки. Может делать периодические обходы страниц, даже если сервисом вы не пользуетесь.

  • serpstatbot - бот компании SerpStat. Перестал обслуживать клиентов из РФ.

  • LinkpadBot - бот одноименного сервиса. Собирает обратные ссылки.

  • DataForSeoBot - бот сервиса DataForSeo. Предоставляет данные об оптимизации по API.

  • Screaming Frog SEO Spider - бот одноименного сервиса, который проводит технический анализ сайтов.

  • AhrefsBot - бот сервиса SEO аналитики Ahrefs. Аналогично предыдущему, в РФ не работает, но данные собирает.

Как заблокировать доступ ботам

Чтобы боты не заходили на сайт, они не должны иметь к нему доступа. Соответственно, сервер должен проверять заголовки сервера и выдавать ошибку 403 (Not allowed) или 500 (Internal Server Error). Тогда боты или те, кто их запускает, поймут, что попасть на сайт не так просто.

Запретить доступ к сайту по User Agent можно в файле .htaccess или в самой логике кода сайта.

Более сложные комбинации, включающие проверку на IP-адрес, частоту запроса, метод обращения или вообще несколько параметров одновременно, мне показалось, что лучше внедрять на уровне кода. Так больше гибкости в настройках.

В любом случае, тут потребуется рука разработчика.

Пример запрета доступа на уровне логики программы. Если User Agent содержит заданные слова в любом регистре, то выдать ошибку 403 с текстом "You are not allowed to visit this website".
Пример запрета доступа на уровне логики программы. Если User Agent содержит заданные слова в любом регистре, то выдать ошибку 403 с текстом "You are not allowed to visit this website".

Можно ли использовать готовые сервисы защиты?

На рынке есть такие сервисы для защиты, как Cloudflare или аналоги, но они обладают одним больших недостатком.

Сервисы часто относят реальных посетителей к ботам, поэтому не дают посмотреть сайт "живым" людям, пока те не подтвердят, что они не являются роботами.

А когда живой человек открывает сайт и видит там необходимость проверки на роботность, с такого сайта хочется сразу же выйти. Мало кому хочется тратить время на лишние действия, если можно открыть соседнюю вкладку и найти нужную информацию там.

Как итог - коммерческие проекты, которые и без того получают меньше прибыли из-за атаки ботов, начинают терять еще и реальных посетителей, потому что сайты становятся неудобными.

Заключение

По мере анализа список буду расширять и постепенно добавлять к статье. Если кому интересно продолжение, сохраняйте страницу в закладки.

Если кто-то ощущает присутствие ботов у себя на сайте - обращайтесь к нам в firemarketing.ru. Поможем выстроить индивидуальную систему защиты.

7 комментариев

Все красиво и подробно, только вот в конце смазали все впечатление. Рассказывали про сканеры и парсеры, а потом приплели Cloudflare и возможность показа капчи, причем как будто это что-то плохое, в умелых руках. Это лучше, чем просто банить всю подсеть в htaccess.

Ответить

Это не лучше. Пользователи отваливаются, конверсия падает. При наличии платного трафика ваш Cloudflare - это вообще убытки.
И все из-за нежелания «банить всю подсеть».
Трафик - дело тонкое.

Ответить

А как заблокировать ботов, аналитику сайтов изнутри сети? Что бы пользак хоть лазиет где попало, не пополнял статистику сайтов и метрик?

Ответить

Не понял, объясните по-другому.

Если на уровне сервера их блочить, то у них не будет доступа к страницам. Статистику метрик они портить не будут, потому что скрипты статистики загружаются на фронте, на странице, в которую бот достучаться не сможет.

Другой вопрос, если они уже просочились и имитируют пользовательскую активность. Тут уже надо ставить отслеживание движения курсора и вычислять подозрительное поведение. А дальше алгоритм тот же - банить по IP, user agent-ам и прочему.

Ответить