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 Class 文章
Apr 04 PHP
php str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
Aug 21 PHP
php实现文件下载更能介绍
Nov 23 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
Mar 27 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 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
Yii操作数据库的3种方法
2014/03/11 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
python 多线程实现检测服务器在线情况
2015/11/25 Python
python版本的读写锁操作方法
2016/04/25 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python实现12306火车票查询器
2017/04/20 Python
Python实现自动上京东抢手机
2018/02/06 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
实习自我鉴定模板
2013/09/28 职场文书
毕业生的自我评价
2013/12/30 职场文书
残疾人创业典型事迹
2014/02/01 职场文书
《桂林山水》教学反思
2014/02/08 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
python三子棋游戏
2022/05/04 Python