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 相关文章推荐
PHP编码规范之注释和文件结构说明
Jul 09 PHP
PHP下常用正则表达式整理
Oct 26 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
php继承的一个应用
Sep 06 PHP
判断php数组是否为索引数组的实现方法
Jun 13 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
php动态绑定变量的用法
Jun 16 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 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
2.PHP入门
2006/10/09 PHP
一个php作的文本留言本的例子(二)
2006/10/09 PHP
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
angular 服务随记小结
2019/05/06 Javascript
python中关于日期时间处理的问答集锦
2013/03/08 Python
pyv8学习python和javascript变量进行交互
2013/12/04 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
Python处理PDF与CDF实例
2020/02/26 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
Python计算信息熵实例
2020/06/18 Python
Python 使用office365邮箱的示例
2020/10/29 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
英国女装网上商店:I Saw It First
2018/10/18 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
大学生文员专业个人求职信范文
2014/01/05 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
物资采购方案
2014/06/12 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers