php下网站防IP攻击代码,超级实用
2015-01-24信息快讯网
现在做外国网络,访问量越来越高了,最近有很多不良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 日期操作小记
php explode函数实例代码
PHP中获取文件扩展名的N种方法小结
PHP中的正则表达式函数介绍
支持中文字母数字、自定义字体php验证码代码
php tp验证表单与自动填充函数代码
php模拟post行为代码总结(POST方式不是绝对安全)
PHP中运用jQuery的Ajax跨域调用实现代码
php中用于检测一个地理IP地址是否可用的代码
PHP 中检查或过滤IP地址的实现代码
php数组函数序列之array_flip() 将数组键名与值对调
php中获取远程客户端的真实ip地址的方法
PHP 数据结构 算法 三元组 Triplet
PHP 分页类代码(简单好用型)第1/2页
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
php通过文件头检测文件类型通用代码类(zip,rar等)
php empty,isset,is_null判断比较(差异与异同)
学习php笔记 字符串处理
PHP类中Static方法效率测试代码
php中去除所有js,html,css代码
PHP 显示客户端IP与服务器IP的代码
php采集时被封ip的解决方法
为IP查询添加GOOGLE地图功能的代码
在PHP中实现Javascript的escape()函数代码