PHP使用Redis对 IP 访问频次进行限制

远昔 代码记录 2022-06-21 1167 0

前言:近期我的一个API接口站点 www.yuanxiapi.cn 被恶意调用了,需要对频率进行限制,有很多种方法 但是想着直接用最简单粗暴的方法,使用Redis对 IP 访问进行限制。

宝塔 PHP需要先安装拓展 redis  QQ截图20220621002003.jpg

$h=3; //分钟设置
$ip=$_SERVER['REMOTE_ADDR'];
$redis = new Redis();
$redis->connect('127.0.0.1', 6379); //连接 Redis
if (!$redis->exists($ip)){
    //第一次访问
    $redis->set($ip,1,$h*60); // 设置N分钟过期时间并设置初始值1
}else{
    //已经记录过IP
    if ($redis->get($ip)<30){ //判断IP有没有到达拉黑阈值
        $redis->incr($ip); //次数加一
 }else{   exit("您的请求过于频繁,{$h}分钟内请求已达到:".$redis->get($ip)."次");}
}
//效果:3分钟内某IP访问超过30次则限制

附言:对IP进行限制,治标不治本,因为还是会有人伪造IP进行恶意访问,除非能精准的获取真实IP(但是很难,目前小白的我还没有发现php即使在伪造IP的各种情况下,还能完美无缺获取真实IP的方法)。


评论

发表评论:

挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论