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读注册表
Oct 09 PHP
PHP脚本数据库功能详解(中)
Oct 09 PHP
UCenter Home二次开发指南
May 28 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
php 实现进制相互转换
Apr 07 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
js实现漫天星星效果
2017/01/19 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
js实现车辆管理系统
2020/08/26 Javascript
python安装Scrapy图文教程
2017/08/14 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
教学质量评估实施方案
2014/03/17 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
python的html标准库
2022/04/29 Python
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android
Java 多线程并发FutureTask
2022/06/28 Java/Android