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 和 MySQL 基础教程(三)
Oct 09 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
PHP常用编译参数中文说明
Sep 27 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
Laravel学习基础之migrate的使用教程
Oct 11 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP程序员必须知道的两种日志实例分析
May 14 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中实现简单的ACL 完结篇
2011/09/07 PHP
php中大括号作用介绍
2012/03/22 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
php发送post请求的三种方法
2014/02/11 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
班主任新年寄语
2014/04/04 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
高中军训感想
2015/08/07 职场文书
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
python创建字典及相关管理操作
2022/04/13 Python