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 分页类 扩展代码
Jun 11 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
php批量修改表结构实例
May 24 PHP
PHP PDOStatement::closeCursor讲解
Jan 30 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 PHP
Jsonp劫持学习
Apr 01 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 事务处理数据实现代码
2010/05/13 PHP
PHP中static关键字原理的学习研究分析
2011/07/18 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
php 常用的系统函数
2017/02/07 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
python逐行读取文件内容的三种方法
2014/01/20 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
工作态度检讨书
2014/02/11 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
教师思想工作总结2015
2015/05/13 职场文书
商业计划书之服装
2019/09/09 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
JS setTimeout与setInterval的区别
2022/04/20 Javascript