php防止网站被攻击的应急代码


Posted in PHP onOctober 21, 2015

前不久一个网站竟然被攻击,数据库被刷掉了,幸好客户机器上有数据库备份。遇到这么严重的问题,必须抓紧找出漏洞,防止再次被攻击。各方面检查之后发现除了服务器需要设置正确之外,其他无从下手,只好从ip地址上来解决这种攻击的问题。

如果发现某个ip访问网站太频繁了就加入到黑名单禁止访问,这不是一个很好的办法,但情急之下向不更好的解决方式,只是权宜之计,以后再进行深入的研究一下。

这个方法总结为一句话就是:通过禁止IP频繁访问防止网站被防攻击

<?php 
header('Content-type: text/html; charset=utf-8'); 
$ip=$_SERVER['REMOTE_ADDR'];//获取当前访问者的ip 
$logFilePath='./log/';//日志记录文件保存目录 
$fileht='.htaccess2';//被禁止的ip记录文件 
$allowtime=60;//防刷新时间 
$allownum=5;//防刷新次数 
$allowRefresh=120;//在允许刷新次数之后加入禁止ip文件中 
 
if(!file_exists($fileht)){ 
  file_put_contents($fileht,''); 
} 
$filehtarr=@file($fileht); 
if(in_array($ip."\r\n",$filehtarr)){ 
  exit('警告:你的IP已经被禁止了!'); 
} 
//加入禁止ip 
$time=time(); 
$fileforbid=$logFilePath.'forbidchk.dat'; 
if(file_exists($fileforbid)){ 
  if($time-filemtime($fileforbid)>30){ 
    @unlink($fileforbid); 
  }else{ 
    $fileforbidarr=@file($fileforbid); 
    if($ip==substr($fileforbidarr[0],0,strlen($ip))){ 
      if($time-substr($fileforbidarr[1],0,strlen($time))>120){ 
        @unlink($fileforbid); 
      }else if($fileforbidarr[2]>$allowRefresh){ 
        file_put_contents($fileht,$ip."\r\n",FILE_APPEND); 
        @unlink($fileforbid); 
      }else{ 
        $fileforbidarr[2]++; 
        file_put_contents($fileforbid,$fileforbidarr); 
      } 
    } 
  } 
} 
//防刷新 
$str=''; 
$file=$logFilePath.'ipdate.dat'; 
if(!file_exists($logFilePath)&&!is_dir($logFilePath)){ 
  mkdir($logFilePath,0777); 
} 
if(!file_exists($file)){ 
  file_put_contents($file,''); 
} 
$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."\r\n"; 
      }else if($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($logFilePath.'forbided_ip.log',$ip.'--'.date('Y-m-d H:i:s',time()).'--'.$uri."\r\n",FILE_APPEND); 
        $timepass=$timetem+$allowtime-$time; 
        exit('警告:不要刷新的太频繁!'); 
      } 
    } 
  } 
} 
if($yesno){ 
  $str.=$checkip.$checkuri.$time."\r\n"; 
} 
file_put_contents($file,$str);

以上就是本文的全部内容,希望对大家学习有所帮助。

PHP 相关文章推荐
输出控制类
Oct 09 PHP
PHP开发文件系统实例讲解
Oct 09 PHP
我的论坛源代码(八)
Oct 09 PHP
echo(),print(),print_r()之间的区别?
Nov 19 PHP
php db类库进行数据库操作
Mar 19 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
Oct 22 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
php使用curl获取https请求的方法
Feb 11 PHP
php实现两个数组相加的方法
Feb 17 PHP
PHP统计当前在线用户数实例讲解
Oct 21 #PHP
php精确的统计在线人数的方法
Oct 21 #PHP
为你总结一些php信息函数
Oct 21 #PHP
深入理解PHP变量的值类型和引用类型
Oct 21 #PHP
为你总结一些php系统类函数
Oct 21 #PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 #PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 #PHP
You might like
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
PHP云打印类完整示例
2016/10/15 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
javascript 触发事件列表 比较不错
2009/09/03 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
python elasticsearch环境搭建详解
2019/09/02 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
python实现查找所有程序的安装信息
2020/02/18 Python
基于FME使用Python过程图解
2020/05/13 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
模具专业毕业生自荐书范文
2014/02/19 职场文书
高中生家长寄语大全
2014/04/03 职场文书
小学生综合素质评语
2014/04/23 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
财会专业大学生求职信
2014/09/26 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
护士节慰问信
2015/02/15 职场文书