unetway / rate-limiting
Скрипт подсчитывает действия пользователя и блокирует его при превышении лимита.
Requires
- php: ^7.0
This package is auto-updated.
Last update: 2024-12-18 13:17:53 UTC
README
PHP-скрипт для защиты от парсинга и ботов. Скрипт позволяет произвести подсчет количества действий или запросов пользователя и заблокировать его на определенное время при достижении заданного количества.
Например, если пользователь больше 5 раз входил на страницу, то вы можете вывести ему сообщение, либо заблокировать доступ на страницу в течении 24 часов.
Проверка осуществляется по IP пользователя (дополнительно можно включить проверку по user-agent).
Требования
На вашем сервере должны быть установлено:
- Redis >=3
- PHP >=7.0
Установка
Для установке просто скопируйте файл RateLimitingService.php в нужный вам каталог, при необхоимости добавьте namespace или переименуйте класс.
Количество действий пользователя хранится к Redis, поэтому убедитесь, что он установлен на вашем сервере или компьютере.
Использование
Проверка осуществляется по IP пользователя (дополнительно можно включить проверку по user-agent).
Параметры, которые можно передать в класс:
- host, адрес подключения к Redis (по умолчанию, localhost).
- maxCallsLimit, количество действий (по умолчанию, 5 попыток).
- timePeriod, время блокировки в секундах (по умолчанию, 86400 - 24 часа).
- userAgent, дополнительно проверять по параметру user-agent браузера пользователя.
Пример 1
Если пользователь посетил страницу больше 10 раз, то отдаем странице код 429 и блокируем дальнейшие действия пользователя на 24 часов.
$rateLimit = new RateLimitingService([
'maxCallsLimit' => 10,
'timePeriod' => 86400
]);
if (!$rateLimit->check()) {
http_response_code(429);
exit();
}
Пример 2
Блокируем действия пользователя и показываем сколько раз он совершил действие.
$rateLimit = new RateLimitingService([
'maxCallsLimit' => 10,
'timePeriod' => 86400
]);
if (!$rateLimit->check()) {
echo "Вы уже отправили форму ${$rateLimit->total()} раз!";
}