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 相关文章推荐
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
php 应用程序安全防范技术研究
Sep 25 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
php学习之function的用法
Jul 14 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
php生成html文件方法总结
Dec 01 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
PHP四种基本排序算法示例
Apr 09 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 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
递归列出所有文件和目录
2006/10/09 PHP
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
js数据类型检测总结
2018/08/05 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python温度转换实例分析
2018/01/17 Python
在python中画正态分布图像的实例
2019/07/08 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
如何撰写岗位职责
2014/02/01 职场文书
党员教师工作决心书
2014/03/13 职场文书
房产代理公证处委托书
2014/04/04 职场文书
消防标语大全
2014/06/07 职场文书
公共场所禁烟标语
2014/06/25 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL