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 相关文章推荐
第七节--类的静态成员
Nov 16 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
深入PHP magic quotes的详解
Jun 17 PHP
php生成html文件方法总结
Dec 01 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
php商品对比功能代码分享
Sep 24 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 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函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
JS使用for循环遍历Table的所有单元格内容
2014/08/21 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
vue实现点击展开点击收起效果
2018/04/27 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
公司总经理工作职责管理办法
2014/02/28 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
努力学习保证书
2015/02/26 职场文书
讲座新闻稿
2015/07/18 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
java实现对Hadoop的操作
2021/07/01 Java/Android
最新最全的手机号验证正则表达式
2022/02/24 Javascript