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 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
基于mysql的bbs设计(四)
Oct 09 PHP
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
解析在zend Farmework下如何创立一个FORM表单
Jun 28 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
php生成带logo二维码方法小结
Apr 08 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 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/06/03 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
python图形用户接口实例详解
2019/12/16 Python
python3中数组逆序输出方法
2020/12/01 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
厨师岗位职责
2013/11/12 职场文书
服装设计行业个人的自我评价
2013/12/20 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
高中物理教学反思
2016/02/19 职场文书