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 COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
PHP的变量总结 新手推荐
Apr 18 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php去除HTML标签实例
Nov 06 PHP
PHP中feof()函数实例测试
Aug 23 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
php无限级分类实现方法分析
Oct 19 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
Javascript 获取LI里的内容
2008/12/17 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
jQuery中:gt选择器用法实例
2014/12/29 Javascript
node.js的事件机制
2017/02/08 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
python中的全局变量用法分析
2015/06/09 Python
详解python单元测试框架unittest
2018/07/02 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
python中with用法讲解
2020/02/07 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
母婴店促销方案
2014/03/05 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
2015年质检工作总结
2015/05/04 职场文书
导游词之太湖
2019/10/08 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
Golang连接并操作MySQL
2022/04/14 MySQL