Данная программа предназначена для блокировки ботов, которые умеют эмулировать браузер, JavaScript, а так же классических ботов.
Программа проверяет посетителя по настроенным фильтрам, и в зависимости от результата выводит капчу, блокирует или пропускает пользователя.
Основные фильтры:
- Белый список ip
- Индексирующие роботы (определяет полезных ботов по обратной DNS записи)
- Черный список ip
- Исключение по User-agent (для ваших ботов)
- Исключение по REQUEST_URI (например для JSON и REST API)
- Без JavaScript (блокировка, кроме исключений)
- Без Cookie (блокировка, кроме исключений)
- IPv6 (показ капчи)
- Мобильный девайс (показ капчи)
- Открытие сайта в iframe (блокировка)
- Переход из Tor-сети (блокировка)
- Отсутствует User-Agent (блокировка)
Вкл/выкл каждого пункта настраивается в конфигурационном файле.
При первом открытии страницы, программа проверяет совпадения из белого/черного списков, список индексирующих робот, user-agent. Если ни одно из правил не сработало, то открывается страница заглушка, в которой делаются дополнительные проверки, требующие определённое время. В процессе проверки отображается индикатор прогресса. В зависимости от результатов, страница может попросить пользователя пройти капчу (сейчас работает только простая капча) или же заблокировать его.
Программа обеспечивает максимальную производительность, не использует базу данных и другие ресурсозатратные операции.
- Распакуйте файлы проекта в папку /antibot/
- Перейдите по адресу https://сайт.рф/antibot/ и убедитесь, что нет ошибок
- Вставьте следующую строку в начало вашего кода. Обычно это index.php в корне сайта
require_once $_SERVER['DOCUMENT_ROOT'].'/antibot/index.php';
- Проверьте работу сайта
- Готово
Файл /lists/whilelist содержит список исключений ip-адресов.
Пример:
2001:0db8::85a3:8a2e:0370:7334 #пример для IPv6
5.24.102.211 # пример для IPv4
Файл /lists/blacklist содержит список заблокированных ip-адресов. В этот список обычно попадают пользователи, которые пытались каким-ли образом обойти механизм проверки на роботность.
Пример файла:
32.23.104.201 # c5b4c36d24417e72 iframe 32.23.104.202 # c5b4c26d24417e73 iframe
В данном примере указан IP-адрес, RayID для удобства поиска и комментарий. В данном случае, причина добавления — запуск сайта во фрейме.
Файл /lists/useragent.rules содержит список разрешающих совпадений User-agent
Можно писать регулярные выражения. Правила проверяются поочередно до первого срабатывания.
Файл /lists/wl_request_url.rules содержит список исключений URL адресов и параметров.
Например:
/wp-json/
будет пропускать REST API запросы в Wordpress- реглярное выражение
.*\.xml$
будет пропускать все xml файлы.
Правила проверяются поочередно до первого срабатывания.
Файл /lists/indexbot.rules содержит список PTR индексирующих роботов. Указывается домен первого уровня.
IP-адреса ботов автоматически добавляются в whilelist для улучшения производительности.
Можно настроить отдачу 404 заголовка при отображении капчи. Это позволить отсеять ботов, которые обрабатываю 404 ошибку. Для этого установите следующее значение в TRUE.
$AB_IS_404 = TRUE;
Каждое посещение записывается в лог-файл antibot.log. Тут можно отследить процесс фильтрации и понять причину блокировки. Чтобы отключить логирование измените переменную в файле vars.inc.php.
$AB_DEBUG=false;
Отключение логирования повышает скорость фильтрации, т.к. нет необходимости лишний раз записывать данные на диск.
Для разблокировки, пользователь должен сообщить RayID, который отображается внизу страницы. Используйте его, чтобы найти запись блокировки в blacklist и для поиска процесса обработки в лог-файле.
- Wordpress, Joomla, 1С Битрикс, Opencart, Drupal, MODX, Netcat, самописная
- Для любых сайтов на PHP 5.6.4 и старше (тестировался на PHP 5.6.4 и 7.1.33, 8.3.15)
EgorNiKO
- GitHub: https://github.com/githubniko/antibot
- Telegram: https://egorniko.ru/r/D5
- https://dzen.ru/a/Z_lToDqVzXV8-7Jt — статья о том, как я защищал сайт от ПФ ботов.