unetway/rate-limiting

该脚本计算用户行为并超过限制时阻止用户。

v1.0.1 2024-05-18 11:50 UTC

This package is auto-updated.

Last update: 2024-09-18 12:54:32 UTC


README

PHP 脚本,用于防止爬虫和机器人。脚本可以计算用户的行为或请求次数,并在达到指定次数时暂时阻止用户。

例如,如果用户访问页面超过5次,您可以向他显示消息,或者阻止他在24小时内访问该页面。

检查是通过用户IP进行的(此外还可以启用按user-agent检查)。

要求

您的服务器上必须安装

  • Redis >=3
  • PHP >=7.0

安装

要安装,只需将 RateLimitingService.php 文件复制到所需目录,如果需要,请添加 namespace 或重命名类。

用户行为数量存储在 Redis 中,因此请确保您已在您的服务器或计算机上安装了 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()} раз!";
}