Новости проекта
PHP-модуль работает под Laravel Octane, RoadRunner и Swoole
Раньше сайтам на Octane и RoadRunner оставался только скрипт в браузере. С версии 1.4.11 модуль подключается к ним через middleware и принимает решение на сервере, до контроллеров.
PHP-модуль BotBan был рассчитан на обычный PHP, где каждый запрос
начинается с чистого листа.
Под Laravel Octane, RoadRunner, Swoole и FrankenPHP в режиме воркера
приложение живёт в памяти и обслуживает тысячи запросов одним процессом.
Строка в index.php там выполняется один раз при запуске, а exit, которым
модуль заканчивает ответ боту, остановил бы весь воркер. Таким сайтам
оставался только скрипт в браузере, а он видит посетителя уже после того,
как сервер собрал страницу.
Что изменилось. В модуле 1.4.11 появился метод BotBan::check(). Он
принимает переменные запроса и cookie и ничего не выводит сам. Модуль
возвращает решение: пропустить запрос в приложение или отдать вместо
страницы свой ответ, то есть страницу проверки, блокировку или ответ 429 при
превышении лимита. Отдаёт его middleware приложения. Замер нагрузки, уборку
кэша и обновление файла модуль откладывает до момента, когда ответ уже ушёл
посетителю.
Логика решения та же, что и в обычном режиме: локальный кэш, пропуск после проверки браузера, кнопка «Я человек», белые списки, «Под атакой». Отличий два. Замедление подозрительных запросов в воркере не применяется: процесс один на много посетителей, и усыпить его значит задержать всех. Порядок заголовков модуль не передаёт, потому что RoadRunner собирает их в случайном порядке, и отпечаток по такому порядку только запутал бы движок.
Как подключить. Готовый middleware для Laravel лежит в базе знаний, в статье о подключении PHP-модуля. Его нужно поставить раньше остальных глобальных middleware приложения: адрес посетителя за прокси к этому моменту уже известен, а заголовки безопасности сайта не попадут на страницу проверки. Обычным сайтам на PHP-FPM и Apache ничего делать не нужно, для них всё работает как раньше.