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 相关文章推荐
BBS(php &amp; mysql)完整版(四)
Oct 09 PHP
PHP+APACHE实现用户论证的方法
Oct 09 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
php Ajax乱码
Apr 09 PHP
基于PHP异步执行的常用方式详解
Jun 03 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 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的变量总结 新手推荐
2011/04/18 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
php实现的日历程序
2015/06/18 PHP
php mysql like 实现多关键词搜索的方法
2016/10/29 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
从0开始的Python学习016异常
2019/04/08 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
倡议书格式及范文
2015/04/29 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle