unetway/rate-limiting 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

unetway/rate-limiting

最新稳定版本:v1.0.1

Composer 安装命令:

composer require unetway/rate-limiting

包简介

Скрипт подсчитывает действия пользователя и блокирует его при превышении лимита.

README 文档

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()} раз!";
}

统计信息

  • 总下载量: 6
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-05-18