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