浅析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 相关文章推荐
php file_exists 检查文件或目录是否存在的函数
May 10 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
PHP 图片水印类代码
Aug 27 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
PHP对象实例化单例方法
Jan 19 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
CI框架附属类用法分析
Dec 26 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 PHP
PHP实现微信提现功能(微信商城)
Nov 21 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
JS实现php的伪分页
2008/05/25 PHP
PHP学习之数组值的操作
2011/04/17 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
Laravel 5+ .env环境配置文件详解
2020/04/06 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
angular分页指令操作
2017/01/09 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
Python基于select实现的socket服务器
2016/04/13 Python
Python中logger日志模块详解
2020/08/04 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
化妆品店促销方案
2014/02/24 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
小学生暑假生活总结
2015/07/13 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
pycharm无法安装cv2模块问题
2022/05/20 Python
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers