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 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php使用mysqli向数据库添加数据的方法
Mar 20 PHP
PHP中使用BigMap实例
Mar 30 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
PHP实现小程序批量通知推送
Nov 27 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
Yii 框架使用Forms操作详解
May 18 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
建立动态的WML站点(三)
2006/10/09 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php class类的用法详细总结
2013/10/17 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
php常用的工具开发整理
2019/09/26 PHP
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
Python中的闭包实例详解
2014/08/29 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
python实现归并排序算法
2018/11/22 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
法律专业应届本科毕业生求职信
2013/10/25 职场文书
写给医生的感谢信
2015/01/22 职场文书
2015年统战工作总结
2015/05/19 职场文书
公司联欢会主持词
2015/07/04 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python