前不久一个网站竟然被攻击,数据库被刷掉了,幸好客户机器上有数据库备份。遇到这么严重的问题,必须抓紧找出漏洞,防止再次被攻击。各方面检查之后发现除了服务器需要设置正确之外,其他无从下手,只好从ip地址上来解决这种攻击的问题。

如果发现某个ip访问网站太频繁了就加入到黑名单禁止访问,这不是一个很好的办法,但情急之下向不更好的解决方式,只是权宜之计,以后再进行深入的研究一下。

这个方法总结为一句话就是:通过禁止IP频繁访问防止网站被防攻击。

<?php header("Content-type: text/html; charset=utf-8"); $ip=$_SERVER["REMOTE_ADDR"];//获取当前访问者的ip $logFilePath="./log/";//日志记录文件保存目录 $fileht=".htaccess2";//被禁止的ip记录文件 $allowtime=60;//防刷新时间 $allownum=5;//防刷新次数 $allowRefresh=120;//在允许刷新次数之后加入禁止ip文件中  if(!file_exists($fileht)){   file_put_contents($fileht,""); } $filehtarr=@file($fileht); if(in_array($ip."",$filehtarr)){   exit("警告:你的IP已经被禁止了!"); } //加入禁止ip $time=time(); $fileforbid=$logFilePath."forbidchk.dat"; if(file_exists($fileforbid)){   if($time-filemtime($fileforbid)>30){     @unlink($fileforbid);   }else{     $fileforbidarr=@file($fileforbid);     if($ip==substr($fileforbidarr[0],0,strlen($ip))){       if($time-substr($fileforbidarr[1],0,strlen($time))>120){         @unlink($fileforbid);       }else if($fileforbidarr[2]>$allowRefresh){         file_put_contents($fileht,$ip."",FILE_APPEND);         @unlink($fileforbid);       }else{         $fileforbidarr[2]++;         file_put_contents($fileforbid,$fileforbidarr);       }     }   } } //防刷新 $str=""; $file=$logFilePath."ipdate.dat"; if(!file_exists($logFilePath)&&!is_dir($logFilePath)){   mkdir($logFilePath,0777); } if(!file_exists($file)){   file_put_contents($file,""); } $uri=$_SERVER["REQUEST_URI"];//获取当前访问的网页文件地址 $checkip=md5($ip); $checkuri=md5($uri); $yesno=true; $ipdate=@file($file); foreach($ipdate as $k=>$v){   $iptem=substr($v,0,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."";       }else if($numtem<$allownum){         $str.=$iptem.$uritem.$timetem.($numtem+1)."";       }       else{         if(!file_exists($fileforbid)){           $addforbidarr=array($ip."",time()."",1);           file_put_contents($fileforbid,$addforbidarr);         }         file_put_contents($logFilePath."forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."",FILE_APPEND);         $timepass=$timetem+$allowtime-$time;         exit("警告:不要刷新的太频繁!");       }     }   } } if($yesno){   $str.=$checkip.$checkuri.$time.""; } file_put_contents($file,$str); 

以上就是本文的全部内容,希望对大家学习有所帮助。