| 今天我开发了下面的代码,算是大功初成,一天拦截了15个IP,服务器负载正常。 <div class="codetitle"><a style="CURSOR: pointer" data="18787" class="copybut" id="copybut18787" onclick="doCopy('code18787')"> 代码如下:<div class="codebody" id="code18787">
 <?php
 //查询禁止IP
 $ip =$_SERVER['REMOTE_ADDR'];
 $fileht=".htaccess2";
 if(!file_exists($fileht))file_put_contents($fileht,"");
 $filehtarr=@file($fileht);
 if(in_array($ip."rn",$filehtarr))die("Warning:"."
 "."Your IP address are forbided by some reason,IF you have any question Pls emill to shop@mydalle.com!"); //加入禁止IP
 $time=time();
 $fileforbid="log/forbidchk.dat";
 if(file_exists($fileforbid))
 { if($time-filemtime($fileforbid)>60)unlink($fileforbid);
 else{
 $fileforbidarr=@file($fileforbid);
 if($ip==substr($fileforbidarr[0],strlen($ip)))
 {
 if($time-substr($fileforbidarr[1],strlen($time))>600)unlink($fileforbid);
 elseif($fileforbidarr[2]>600){file_put_contents($fileht,$ip."rn",FILE_APPEND);unlink($fileforbid);}
 else{$fileforbidarr[2]++;file_put_contents($fileforbid,$fileforbidarr);}
 }
 }
 }
 //防刷新
 $str="";
 $file="log/ipdate.dat";
 if(!file_exists("log")&&!is_dir("log"))mkdir("log",0777);
 if(!file_exists($file))file_put_contents($file,"");
 $allowTime = 120;//防刷新时间
 $allowNum=10;//防刷新次数
 $uri=$_SERVER['REQUEST_URI'];
 $checkip=md5($ip);
 $checkuri=md5($uri);
 $yesno=true;
 $ipdate=@file($file);
 foreach($ipdate as $k=>$v)
 { $iptem=substr($v,32);
 $uritem=substr($v,32,32);
 $timetem=substr($v,64,10);
 $numtem=substr($v,74);
 if($time-$timetem<$allowTime){
 if($iptem!=$checkip)$str.=$v;
 else{
 $yesno=false;
 if($uritem!=$checkuri)$str.=$iptem.$checkuri.$time."1rn";
 elseif($numtem<$allowNum)$str.=$iptem.$uritem.$timetem.($numtem+1)."rn";
 else
 {
 if(!file_exists($fileforbid)){$addforbidarr=array($ip."rn",time()."rn",1);file_put_contents($fileforbid,$addforbidarr);}
 file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."rn",FILE_APPEND);
 $timepass=$timetem+$allowTime-$time;
 die("Warning:"."
 "."Sorry,you are forbided by refreshing frequently too much,Pls wait for ".$timepass." seconds to continue!");
 }
 }
 }
 }
 if($yesno) $str.=$checkip.$checkuri.$time."1rn";
 file_put_contents($file,$str);
 ?>
 
 把程序include进要进行的php文件头部。
 程序首先判断IP是否在禁止列表,如果在则退出;
 否则,如果IP在监控列表,10分钟内点击超过600次则加入禁止列表。
 如果没有超过时间和次数则次数加1,同时,监控IP是否对同一页面频繁操作。
 由于是机器刷频,所以程序不用session判断。
 还有就是更新的时候,不能用独占处理文件。
 使用伪静态存储IP也会出错。
 这个程序还有变化和改进的余地的,大家也可以参考QQ农场里的降级原理,基本上农场也是按照这个原理开发的吧。
 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |