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


Posted in PHP onOctober 24, 2010

今天我开发了下面的代码,算是大功初成,一天拦截了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 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],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 相关文章推荐
PHP文件读写操作之文件写入代码
Jan 13 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
php实现模拟post请求用法实例
Jul 11 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 PHP
PHP文件后缀不强制为.php方法
Mar 31 PHP
PHP回调函数简单用法示例
May 08 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 #PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 #PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 #PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 #PHP
学习php笔记 字符串处理
Oct 19 #PHP
PHP 函数执行效率的小比较
Oct 17 #PHP
PHP类中Static方法效率测试代码
Oct 17 #PHP
You might like
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
jquery实现居中弹出层代码
2010/08/25 Javascript
jQuery参数列表集合
2011/04/06 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
2017/05/08 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
skyn ICELAND官网:冰岛成分天然护肤品
2020/08/24 全球购物
大学生简短的自我评价分享
2014/02/20 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
前台岗位职责
2015/02/13 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA