系統在網絡環境上線後,網站的安全性是開發及運維需要考慮的重要問題,這裏我們談到的是防止黑客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次後顯示如下
接口限流成功。
持續完善,待續...