PHP应对洪水般的恶意访问接口 访问冲击
生活随笔
收集整理的這篇文章主要介紹了
PHP应对洪水般的恶意访问接口 访问冲击
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 / 驗證碼(最簡單有效的防護(hù)),采用點觸驗證,滑動驗證或第三方驗證碼服務(wù)、
2 / 歸屬地,檢測IP所在地是否與手機(jī)號歸屬地匹配;IP所在地是否是為常在地
3 / 可疑用戶,對于可疑用戶要求其主動發(fā)短信(或其他主動行為)來驗證身份
4 / 黑名單用戶,對于黑名單用戶,限制其操作,API接口直接返回success,1可以避免浪費資源,2混淆黑戶判斷
5 /??https,token
6 / 頻率,限制同設(shè)備,同IP等發(fā)送次數(shù),單點時間范圍可請求時長
?
設(shè)置頻率
public function checkRequest($ip){#一分鐘接口調(diào)用只能10次$redis= new \Redis();$redis->open('xxx',6379);//服務(wù)器連接的Ip與端口號$redis->auth('xxx');//redis服務(wù)的密碼$redis->select(1);//選擇連接的redis,默認(rèn)redis的庫有16個 // $redis->flushAll();exit;//清空redis的所有庫$lock_time=$redis->zScore('user_list',$ip);//返回有序集中key中成員member的scoreif(time()-$lock_time<3000){return 1;//在黑名單中}else{$redis->zRem('user_list',$ip);//redis中zRem命令用于移除有序集合中的一個或者是多個成員,不存在的成員將被忽略,當(dāng)key存在但是不是有序集合類型是,返回一個錯誤}#記錄訪問次數(shù)$ip_value=$redis->get($ip);//get命令用于獲取指定的keyz值,如果key值不存在返回nullif(!$ip_value){#設(shè)置key自增$redis->incr($ip);//將key中存儲的數(shù)字值增1#設(shè)置過期時間為3000秒$redis->expire($ip,3000);//給key值設(shè)置生存時間}else{$redis->incr($ip);}#集合里邊的元素不會重復(fù) 字符串#把ip當(dāng)做key 存入redis 存5分鐘if($ip_value>10){#使用有序集合$redis->zAdd('user_list',time(),$ip);//命令用于將一個或者是多個于是怒以及分?jǐn)?shù)值加入到有序集合中return 2;//調(diào)用接口頻繁}}?
總結(jié)
以上是生活随笔為你收集整理的PHP应对洪水般的恶意访问接口 访问冲击的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 馗怎么读 解析馗字的读音和意义?
- 下一篇: PHP折半查找