系统在网络环境上线后,网站的安全性是开发及运维需要考虑的重要问题,这里我们谈到的是防止黑客DDOS攻击,进行接口限流的解决方案。
Redis实现接口限流解决方案
redis的安装及php扩展可参见:https://mp.csdn.net/postedit/89470966
本机的调试环境在上文中windows安装及redis服务器启动都已谈过。
需求分析:我们可以根据访问ip地址,在一定时间内访问次数过多,我们可以屏蔽访问
简单实现方案1
10秒一个ip地址只能访问5次
<?php
$redis = new Redis();
$redis->connect("127.0.0.1",6379);
$ip = $_SERVER['REMOTE_ADDR'];
//10秒一个ip地址只能访问5次
$limits=5;
$check=$redis->exists($ip);
if($check){
$num=$redis->incr($ip);
if($num>$limits){
exit("请求太频繁,请稍后再试.");
}
}else{
//第一次访问,增加访问次数
$num=$redis->incr($ip);
//设置生存时间 过期时间
$redis->expire($ip,10);
}
$num =$redis->get($ip);
echo "第".$num."次请求";
<?php
$redis = new Redis();
$redis->connect("127.0.0.1",6379);
$ip = $_SERVER['REMOTE_ADDR'];
//10秒一个ip地址只能访问5次
//$redis->del(#ip);
$limits=5;
if($redis->lLen($ip)<$limits){
$redis->lPush($ip,time());
$redis->expire($ip,10);
echo "正常访问";
}else{
$lasttime=$redis->lIndex($ip,0);
if(time()-$lasttime<10){
exit("请求太频繁,请稍后再试.");
}
}
浏览器访问
10s内访问超过5次后显示如下
接口限流成功。
持续完善,待续...