用戶(hù)非法訪問(wèn)路由,則當(dāng)前ip自增加一 自增 incr 方法
// dd($request->getRealIp( $safe_mode=true ));
$Redis = new Redis;
$key = 'forbidden:ip:' . $request->getRealIp( $safe_mode = true );
$limit = 10;
#設(shè)置過(guò)期時(shí)間 2小時(shí) 讀系統(tǒng)配置
$error_ex_time = bcmul(2,3600);
$check = $Redis::exists($key);
dd('ckeck:'.$check);
if($check && $error_ex_time > 0){
$Redis::incr($key);
dd('key1:'.$Redis::get($key));
if( $Redis::get($key) >= $limit )
return error('','當(dāng)前IP非法訪問(wèn)次數(shù)過(guò)多,已禁用');
}else{
if( $error_ex_time ) {
$Redis::incr($key);
$Redis::expire($key,$error_ex_time);
dd('key2:'.$Redis::get($key));
}
}
出現(xiàn)問(wèn)題
這個(gè)是請(qǐng)求一次后,直接用redis查詢(xún)當(dāng)前的key值發(fā)現(xiàn),如果自增異常就不會(huì)累加
實(shí)現(xiàn)案例 用 set key 累加1 也可以實(shí)現(xiàn)當(dāng)前功能
這是因?yàn)閣ebman框架的原因嗎
我用你的代碼在webman里跑到了40+也沒(méi)有遇到問(wèn)題,使用的包是 composer require psr/container ^1.1.1 illuminate/redis illuminate/events
要不把IP輸出出來(lái)一起看看,插眼,等大佬回答學(xué)習(xí)經(jīng)驗(yàn)
$Redis = new Redis();
$key = 'forbidden:ip:127.0.0.1';
$error_ex_time = 2 * 3600;
$check = $Redis::exists($key);
if ($check && $error_ex_time > 0) {
$Redis::incr($key);
} else {
if( $error_ex_time ) {
$Redis::incr($key);
$Redis::expire($key,$error_ex_time);
}
}
return json($Redis::get($key));
補(bǔ)充,如果不考慮waf問(wèn)題這么寫(xiě)沒(méi)問(wèn)題,如果考慮waf問(wèn)題的話(huà)要自己做處理,waf形式得到的ip是 192.167.1.2 192.168.2.3 大概這種
這個(gè)功能主要作用防止用戶(hù)調(diào)接口,訪問(wèn)不存在的路由才記錄,沒(méi)有登錄的用戶(hù)是沒(méi)有數(shù)據(jù)記錄的,所以我只能根據(jù)ip來(lái)判斷,哈哈哈哈