防止网站被攻击的办法

前不久新作的一个抽奖的网站竟然被攻击了,中奖数据库被刷掉了,⊙﹏⊙b汗,第一次被攻击的,还被攻击的这么惨,幸好客户机器上有数据库备份,不然就死惨了。出了这么大的一个嗅事,当然得赶紧找出漏洞了,好防止再次被攻击,各方面检查之后发现服务器需要设置好外还真不知道从哪里下手了,只好从ip地址上来解决这种攻击的问题了,就是如果发现某个ip访问网站太频繁了就加入到黑名单禁止访问,这不是一个很好的办法,但情急之下也没什么好办法了,将就着就这么着了,先管一段时间再说,下面是我应急的代码,只是权宜之计,以后会进行深入的总结一下,呵呵。

  1. <?php 
  2. /*  
  3. *通过禁止IP频繁访问防止网站被防攻击代码 
  4. *design by www.phpernote.com 
  5. */ 
  6. header('Content-type: text/html; charset=utf-8'); 
  7. $ip=$_SERVER['REMOTE_ADDR'];//获取当前访问者的ip 
  8. $logFilePath='./log/';//日志记录文件保存目录 
  9. $fileht='.htaccess2';//被禁止的ip记录文件 
  10. $allowtime=60;//防刷新时间 
  11. $allownum=5;//防刷新次数 
  12. $allowRefresh=120;//在允许刷新次数之后加入禁止ip文件中 
  13.  
  14. if(!file_exists($fileht)){ 
  15.     file_put_contents($fileht,''); 
  16. $filehtarr=@file($fileht); 
  17. if(in_array($ip."\r\n",$filehtarr)){ 
  18.     exit('警告:你的IP已经被禁止了!'); 
  19. }  
  20. //加入禁止ip 
  21. $time=time(); 
  22. $fileforbid=$logFilePath.'forbidchk.dat'
  23. if(file_exists($fileforbid)){ 
  24.     if($time-filemtime($fileforbid)>30){ 
  25.         @unlink($fileforbid); 
  26.     }else
  27.         $fileforbidarr=@file($fileforbid); 
  28.         if($ip==substr($fileforbidarr[0],0,strlen($ip))){ 
  29.             if($time-substr($fileforbidarr[1],0,strlen($time))>120){ 
  30.                 @unlink($fileforbid); 
  31.             }else if($fileforbidarr[2]>$allowRefresh){ 
  32.                 file_put_contents($fileht,$ip."\r\n",FILE_APPEND); 
  33.                 @unlink($fileforbid); 
  34.             }else
  35.                 $fileforbidarr[2]++; 
  36.                 file_put_contents($fileforbid,$fileforbidarr); 
  37.             } 
  38.         } 
  39.     } 
  40. //防刷新 
  41. $str=''
  42. $file=$logFilePath.'ipdate.dat'
  43. if(!file_exists($logFilePath)&&!is_dir($logFilePath)){ 
  44.     mkdir($logFilePath,0777); 
  45. if(!file_exists($file)){ 
  46.     file_put_contents($file,''); 
  47. $uri=$_SERVER['REQUEST_URI'];//获取当前访问的网页文件地址 
  48. $checkip=md5($ip); 
  49. $checkuri=md5($uri); 
  50. $yesno=true; 
  51. $ipdate=@file($file); 
  52. foreach($ipdate as $k=>$v){ 
  53.     $iptem=substr($v,0,32); 
  54.     $uritem=substr($v,32,32); 
  55.     $timetem=substr($v,64,10); 
  56.     $numtem=substr($v,74); 
  57.     if($time-$timetem<$allowtime){ 
  58.         if($iptem!=$checkip){ 
  59.             $str.=$v
  60.         }else
  61.             $yesno=false; 
  62.             if($uritem!=$checkuri){ 
  63.                 $str.=$iptem.$checkuri.$time."\r\n"
  64.             }else if($numtem<$allownum){ 
  65.                 $str.=$iptem.$uritem.$timetem.($numtem+1)."\r\n"
  66.             } 
  67.             else
  68.                 if(!file_exists($fileforbid)){ 
  69.                     $addforbidarr=array($ip."\r\n",time()."\r\n",1); 
  70.                     file_put_contents($fileforbid,$addforbidarr); 
  71.                 } 
  72.                 file_put_contents($logFilePath.'forbided_ip.log',$ip.'--'.date('Y-m-d H:i:s',time()).'--'.$uri."\r\n",FILE_APPEND); 
  73.                 $timepass=$timetem+$allowtime-$time
  74.                 exit('警告:不要刷新的太频繁!'); 
  75.             } 
  76.         } 
  77.     } 
  78. if($yesno){ 
  79.     $str.=$checkip.$checkuri.$time."\r\n"
  80. file_put_contents($file,$str); 

转载请注明:代码家园 » 防止网站被攻击的办法

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)