unetway / rate-limiting
该脚本计算用户行为并超过限制时阻止用户。
v1.0.1
2024-05-18 11:50 UTC
Requires
- php: ^7.0
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()} раз!";
}