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的substr_replace将指定两位置之间的字符替换为*号
May 04 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
php自定义错误处理用法实例
Mar 20 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
PHP 类与构造函数解析
Feb 06 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
PHP实现的装箱算法示例
Jun 23 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 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
oracle资料库函式库
2006/10/09 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
Js切换功能的简单方法
2010/11/23 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
解决Django no such table: django_session的问题
2020/04/07 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
反腐倡廉标语
2014/06/24 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
PHP新手指南
2021/04/01 PHP
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL