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+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
PHP遍历目录并返回统计目录大小
Jun 09 PHP
PHP模拟QQ登录的方法
Jul 29 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
PHP实现根据时间戳获取周几的方法
Feb 26 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
Apr 14 PHP
PHP7 整型处理机制修改
Mar 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下目前为目最全的CURL中文说明
2010/08/01 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
python 查找字符串是否存在实例详解
2017/01/20 Python
Python3多线程操作简单示例
2018/05/22 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
管理科学大学生求职信
2013/11/13 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
婚礼秀策划方案
2014/05/19 职场文书
幼儿园法制宣传日活动总结
2014/11/01 职场文书
2015年安全月活动总结
2015/03/26 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
公司财务管理制度
2015/08/04 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
Python学习之迭代器详解
2022/04/01 Python
python中redis包操作数据库的教程
2022/04/19 Python