Diese Funktion wird verwendet, um zu zählen, wie oft jeder Besucher in einem kurzen Zeitraum besucht hat. Wenn die Anzahl der Besuche den Grenzwert überschreitet, können Sie PHP verwenden, um den Blockierungsvorgang
durchzuführen Ich habe es bereits in der Praxis getestet und die Ergebnisse sind sehr gut.
Übrigens verwende ich Dateien im Code, um die IP-Adresse und die Uhrzeit des Besuchers aufzuzeichnen Verwenden Sie eine Datenbank (oder seien Sie schlau und speichern Sie sie in der Sitzung). Ich werde nicht auf die Gründe eingehen, die jeder kennt
/** 防止客戶端惡意重整 用法: $isf5=Fun::isf5(); 返回: 返回bool[true:對方在惡意重整;false:正常訪問] /**/ public static function isf5(){ $_f=Run.'_isf5'; if(!file_exists($_f)){ file_put_contents($_f,serialize(array()),LOCK_EX); chmod($_f,0777); } $arr=unserialize(file_get_contents($_f)); $arr=(!is_array($arr)) ? array() : $arr; //清理掉10秒前訪問的用戶 foreach($arr as $k=>$v){ if($_ENV['now']-$v['t'] >= 10){ unset($arr[$k]); } } $ip='_'.(self::cur('ip')); if(!isset($arr[$ip])){ $arr[$ip]['n']=1; //1s內連線的次數 $arr[$ip]['t']=$_ENV['now']; //第1次訪問的時間 file_put_contents($_f,serialize($arr),LOCK_EX); chmod($_f,0777); unset($_f,$arr,$ip); return FALSE; }else{ if(!isset($arr[$ip]['t']) or !is_numeric($arr[$ip]['t'])){ unset($arr[$ip]); file_put_contents($_f,serialize($arr),LOCK_EX); chmod($_f,0777); unset($_f,$arr,$ip); return FALSE; } if(($_ENV['now']-$arr[$ip]['t']) <= 1){ //若距離上次訪問的時間沒有超過1s,則只累加次數 $arr[$ip]['n']+=1; if($arr[$ip]['n']>=5){ unset($_f,$arr,$ip); return TRUE; }else{ file_put_contents($_f,serialize($arr),LOCK_EX); chmod($_f,0777); unset($_f,$arr,$ip); return FALSE; } }else{ //若距離上次訪問的時間已經超過1s,則重新計數 $arr[$ip]['n']=1; $arr[$ip]['t']=$_ENV['now']; file_put_contents($_f,serialize($arr),LOCK_EX); chmod($_f,0777); unset($_f,$arr,$ip); return FALSE; } } unset($_f,$arr,$ip); return FALSE; }