English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 威盾新闻 >> php下网站防IP攻击代码,超级实用

 

php下网站防IP攻击代码,超级实用

威盾防火墙 2014-12-15

 
现在做外国网络,访问量越来越高了,最近有很多不良IP不停的进行攻击,由于不是自己的主机,所以,只能通过代码去阻止它们。
今天我开发了下面的代码,算是大功初成,一天拦截了15个IP,服务器负载正常。 
复制代码代码如下:

<?php 
//查询禁止IP 
$ip =$_SERVER['REMOTE_ADDR']; 
$fileht=".htaccess2"; 
if(!file_exists($fileht))file_put_contents($fileht,""); 
$filehtarr=@file($fileht); 
if(in_array($ip."\r\n",$filehtarr))die("Warning:"."<br>"."Your IP address are forbided by some reason, IF you have any question Pls emill to [email protected]!"); 

//加入禁止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],0,strlen($ip))) 
{ 
if($time-substr($fileforbidarr[1],0,strlen($time))>600)unlink($fileforbid); 
elseif($fileforbidarr[2]>600){file_put_contents($fileht,$ip."\r\n",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,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."1\r\n"; 
elseif($numtem<$allowNum)$str.=$iptem.$uritem.$timetem.($numtem+1)."\r\n"; 
else 
{ 
if(!file_exists($fileforbid)){$addforbidarr=array($ip."\r\n",time()."\r\n",1);file_put_contents($fileforbid,$addforbidarr);} 
file_put_contents("log/forbided_ip.log",$ip."--".date("Y-m-d H:i:s",time())."--".$uri."\r\n",FILE_APPEND); 
$timepass=$timetem+$allowTime-$time; 
die("Warning:"."<br>"."Sorry,you are forbided by refreshing frequently too much, Pls wait for ".$timepass." seconds to continue!"); 
} 
} 
} 
} 
if($yesno) $str.=$checkip.$checkuri.$time."1\r\n"; 
file_put_contents($file,$str); 
?> 

把程序include进要进行的php文件头部。 
程序首先判断IP是否在禁止列表,如果在则退出; 
否则,如果IP在监控列表,10分钟内点击超过600次则加入禁止列表。 
如果没有超过时间和次数则次数加1,同时,监控IP是否对同一页面频繁操作。 
由于是机器刷频,所以程序不用session判断。 
还有就是更新的时候,不能用独占处理文件。 
使用伪静态存储IP也会出错。 
这个程序还有变化和改进的余地的,大家也可以参考QQ农场里的降级原理,基本上农场也是按照这个原理开发的吧。

相关内容: 最新内容:
PHP MYSQL注入攻击需要预防7个要点[2014-12-15]
php防止sql注入示例分析和几种常见攻击正则表达式[2014-12-15]
php 攻击方法之谈php+mysql注射语句构造[2014-12-15]
一次防CC攻击案例[2014-12-15]
通过ip进行攻击的原理及预防[2014-12-13]
黑客通过IP欺骗进行攻击的原理及预防[2014-12-13]
PHP 实用代码收集[2014-12-15]
10个实用的PHP代码片段[2014-12-15]
PHP里8个鲜为人知的安全函数分析[2014-12-15]
php常用的安全过滤函数集锦[2014-12-15]
PHP中使用addslashes函数转义的安全性原理分析[2014-12-15]
PHP MYSQL注入攻击需要预防7个要点[2014-12-15]