Борьба с парсерами и ботами - antiBot


Первый случай
Примерно год назад повадился на сайт парсер который шерстил сайт с разных IP адресов и c разными user agent, воровал информацию.
Сайт по содержанию имел около 10 миллионов страниц и ежедневно обновлялся по 10к страниц в день. Видел его даже в статистике сайта на метрике. Но все не мог придумать как его заблокировать.
Пробовал использовать компонент siteStatistics с костамизаций так чтобы можно было блочить его по IP адресам.
Худо бедно кое как избавился от этого парсера.

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

UPD: цена снижена с 1490 руб до 590 руб, чтобы можно было купить сразу для нескольких сайтов

siteStatistics — ведет статистику, это отлично, но он не для целей защиты от нападения. А мне нужно было чистить тот мусор который скапливается и разрастается в базе данных при каждом запросе, а это проблема. Так же необходимо было вести список IP адресов и USER AGENT которые нужно блокировать, и нужна была возможность редиректа на страницу блокировки или выдачу сообщения о блокировки.

В третий раз
Пишет мне один очень хороший знакомый, с вопросом: а как защитится от ботов которые нагружают сайт своими переходами. Обсудили. Набросал небольшую логику как же все таки можно отсекать ботов + парсеров с сайта. По шарился в интернете, и посмотрев работу кое каких компонентов других CMS, вывел для себя заключения что мне нужно сделать компонент.

Так что прошу знатоков linux, nginx и apache сильно меня не критиковать, так как сам и так знаю что есть всяческие утилиты по блокировки и защите от ботов и парсеров.
Но проблема заключается в том что с помощью них сложно определить кто сейчас парсит сайт или какой бот гуляет у тебя на сайте (особенно если знаешь только php). И вообще это нормальный бот или подделка какого нибудь yandex или google бота.
Все бы ничего, есть разные уловки для блокировки ботов через веб-сервера, но боты то новые появляются, как быть с ними?

antiBot


В общем написал компонент который умеет блокировать ботов и парсеров по IP и USER AGENT с проверкой на фэковых ботов. В будущем планируется добавить блокировку по части IP адреса.

Компонент ведет статистику за 3 дня(это по умолчанию, можно поставить больше) и чистить её по наступлению даты или если дата последней отчитки меньше. Очистка производится один раз в сутки при входе пользователя/бота на сайт.
Это позволяет не захламлять базу данных с переходами и вовремя вычислять парсеров и ботов через список посетителей и хитов

Список хитов



Список посетителей



Блокировка ботов и парсеров


Можно составлять свои СТОП-ЛИСТЫ с блокировкой и выводом сообщения или редиректом на страницу.

Добавление стоп-листа





Блокировка

Запись и блокировка ботов/парсеров/пользователей производится на событии OnHandleRequest что позволяет избавится от бота еще на подходе к самому важно: контенту. То есть бот будет заблокирован до того как будет загружен ресурс, чанки, сниппеты, шаблоны.

Как по мне так это очень полезный компонент который избавит от дополнительной нагрузки на сайт так и защитит от воровства контента.
Уже установил на клиентские сайты на modx с блокировкой ботов AhrefsBot, MJ12bot, DotBot и SemrushBot

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

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

Компонент по стоимости 1490 руб.
antiBot

Установить и посмотреть как работает можно на modhost.pro.
Свою демку делать не стал)) Все ровно кто нибудь заблокирует по случайности)))

PS. robots.txt, apache, nginx это круто, но а если новый бот появится?

Обновление от 27.02.2019



Добавлена кнопка для скачивания стоп листов из репозитория для блокировки ботов. После скачивания создаются стоп листы с правилами для блокировки ботов.
Репозиторий будет периодически пополняется новыми правилами блокировки.
Андрей Степаненко
26 февраля 2019, 19:19
7
710
+14
Поблагодарить автора Отправить деньги

Комментарии: 22

Здоров Александр
26 февраля 2019, 20:31
0
пишу как сеошник: я так понимаю по скринам, что можно наблюдать посещаемость сайта всеми ботами, в том числе Яндекса и Google, статистика ведется, по каким ресурсам прошел бот?
Вот прямо на днях делал себе зарубку продумать и как-то наладить контроль за ботами, чтобы понимать, какие страницы обходились и когда (про вебмастер яндекса знаю)
    Андрей Степаненко
    26 февраля 2019, 20:33
    +1
    Все верно, переходы от куда и куда. на скринах выведено не все так как с клиентского сайта делалось.
Yar
Yar
27 февраля 2019, 11:39
0
Интересный компонент, спасибо.
А как можно до установки AntiBot узнать о посещениях AhrefsBot, MJ12bot, DotBot и SemrushBot?
    Андрей Степаненко
    27 февраля 2019, 11:47
    +1
    Скачать siteStatistics там useragent отображается.
      Yar
      Yar
      27 февраля 2019, 12:54
      0
      Понял, сейчас проверю. Благодарю
        Андрей Степаненко
        27 февраля 2019, 13:41
        0
        Ну как, есть кто нибудь подозрительный?
          Yar
          Yar
          28 февраля 2019, 11:31
          0
          только поставил. Жду набора статистики и буду вычислять «паразитов»
            Андрей Степаненко
            28 февраля 2019, 11:33
            0
            Я по позже еще сделаю google капчу чтобы если не понятно толи бот толи человек можно было его направить на страницу чтобы тот прошел проверку. Если пройдет то автоматически отключается стоп лист))
              Yar
              Yar
              28 февраля 2019, 11:39
              0
              Ага, так будет более гуманно))

              Из неопознанных объектов пока вычислил только этого:
              Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)

              Я правильно понял, что бот должен начинаться с «compatible;»?
                Андрей Степаненко
                28 февраля 2019, 11:47
                +1
                Может как угодно быть написано.
                Там прям сразу нельзя сказать что бот паразит!
                Надо смотреть по нему информацию в интернете.

                Этот паразит: GrapeshotCrawler.

                Здесь опубликовал нормальных ботов которых не вкоем случае нельзя блокировать
                antibot.bustep.ru. В случае блокировки

                Единственно если бот прикинулся google или яндекс, их можно проверить по IP, поддельный он или нет, это через antibot можно сделать для ботов yandex, google и mail. больше пока никаких не добавлял.
                  Yar
                  Yar
                  28 февраля 2019, 11:56
                  0
                  Благодарю за ссылку!
                  Как соберется статистика и появится время, начну «зачистку» Антиботом
                Андрей Степаненко
                28 февраля 2019, 11:53
                +1
                Вообще везде где есть googlebot, yandex, mail.ru не стоит блокировать. Если конечно он не поддельный. Если поддельный то нужно блокировать по IP адресу
Николай Загумённов
03 марта 2019, 16:34
0
Компонент может определять бота Facebook из коробки?
    Андрей Степаненко
    04 марта 2019, 04:24
    +1
    Компонент видит всех ботов. А решении о блокировки уже сам принимаешь.
    Он автоматически никого не блокирует.
    Составляется статистика чтобы можно было понять какой бот у тебя на сайте орудует.
    После чего уже сам добавляешь его по IP или USER AGENT в стоп лист для блокировки этого бота.
Andrei D.
09 марта 2019, 14:26
0
«Две недели назад, какой то экспериментатор устроил мне атаку на форму регистрации пользователей, и как давай регистрировать по 2-3 пользователей в секунду. Пришлось закрыть сайт на некоторое время чтобы остановить регистрацию и выяснить как от него избавится» почему просто не сделать подтверждение адреса э-почты и потом удалять по cron неподтвержденные?
    Андрей Степаненко
    09 марта 2019, 15:05
    0
    весь фокус в том что этот хакер использовал емайл базу разную.
    Спамом меня моментально засыпало об ошибке отправки сообщений.
    Да и потом если бы не остановил у меня бы База разрослась не пойми до какого количества записей.
    Крон это не выход
Grigorii
17 марта 2019, 11:57
0
Зачем такие сложности? Может просто блокировать клиентов без включенного JS? Продавать обычную blacklist адмику — такое себе занятие. Вот если бы вы создали базу со списком IP, UA ботов и регулярно ее обновляли, давая возможность выбора, кого блокировать, кого нет в той же админке…
    Андрей Степаненко
    17 марта 2019, 12:01
    0
    В компонент уже подключен репазиторий из которого загружаются стоп листы.

    Может просто блокировать клиентов без включенного JS
    Это как?
      Grigorii
      18 марта 2019, 10:06
      0
      Вариантов несколько. В некоторых случаях сам хостинг может это реализовать, иначе нужно написать небольшой код, который например с помощью JS будет выставлять определенное значение в куки, которое можно ловить в том же index.php, и, например, при отсутствии нужной куки определять дальнейшее поведение.
        Андрей Степаненко
        18 марта 2019, 10:40
        0
        Скорей всего боты тоже с js включённым могут работать. А если это Яндекс бот зашёл без js?
        В общем блокировать всех подряд без разборно думаю что очень плохая практика.

        Этот компонент как раз и занимается тем что ведёт статистику (по умолчанию за 3 дня). Статистика за период меньше трёх дней автоматически удаляется.
        Так можно определить кто бот а кто нормальный пользователь.
        Кроме того доступна возможность проверить фейковых ботов яндекса, гугла и маил через обратные днс. Опять же эта возможность реализована через репозиторий.

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

        В общем тут одним блэклистом не отделаешься.

        Этот компонент универсален.
    Андрей Степаненко
    17 марта 2019, 12:02
    0
    Продавать обычную blacklist адмику — такое себе занятие.
    Описания компонента вообще читали?
      Grigorii
      18 марта 2019, 10:08
      0
      Последний абзац с апдейтом пропустил, если честно. До этого было упоминание только про составление собственных стоп листов.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.