浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法


Posted in PHP onJune 18, 2013

废话不多说,上代码

<?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);
?>
PHP 相关文章推荐
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
php将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
用 Composer构建自己的 PHP 框架之构建路由
Oct 30 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
php unlink()函数使用教程
Jul 12 PHP
PHP rmdir()函数的用法总结
Jul 02 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 PHP
Laravel配合jwt使用的方法实例
Oct 25 PHP
解析PHP计算页面执行时间的实现代码
Jun 18 #PHP
php实现简单洗牌算法
Jun 18 #PHP
php抽奖小程序的实现代码
Jun 18 #PHP
解析PHP生成静态html文件的三种方法
Jun 18 #PHP
解析PHP汉字转换拼音的类
Jun 18 #PHP
解析php中反射的应用
Jun 18 #PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 #PHP
You might like
默默简单的写了一个模板引擎
2007/01/02 PHP
二招解决php乱码问题
2012/03/25 PHP
VBScript版代码高亮
2006/06/26 Javascript
js电信网通双线自动选择技巧
2008/11/18 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
使用HTML5拍照示例代码
2013/08/06 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
女娲补天教学反思
2014/02/05 职场文书
欢送退休感言
2014/02/08 职场文书
行政监察建议书
2014/05/19 职场文书
同志主要表现材料
2014/08/21 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
建国大业观后感600字
2015/06/01 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
试了下Golang实现try catch的方法
2021/07/01 Golang
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers