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 24 PHP
php 中英文语言转换类
Sep 07 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
PHP生成条形图的方法
Dec 10 PHP
php验证码的制作思路和实现方法
Nov 12 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
php实现页面纯静态的实例代码
Jun 21 PHP
关于PHP求解三数之和问题详析
Nov 09 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 allow_url_include的应用和解释
2010/04/22 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
vue实现简单图片上传
2020/06/30 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
分析python服务器拒绝服务攻击代码
2014/01/16 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
详解Python中的文本处理
2015/04/11 Python
python妙用之编码的转换详解
2017/04/21 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
服务质量承诺书
2014/03/27 职场文书
老师对学生的寄语
2014/04/09 职场文书
总经理任命书范本
2014/06/05 职场文书
中小学校园安全广播稿
2014/09/29 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
法律意见书范本
2015/06/04 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书