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之第七天
Oct 09 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
php实现通过ftp上传文件
Jun 19 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
PHP chr()函数讲解
Feb 11 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 15 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
python Django批量导入数据
2016/03/25 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
美国女孩服装购物网站:Justice
2017/03/04 全球购物
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
圣诞节红领巾广播稿
2014/02/03 职场文书
商标侵权律师函
2015/05/27 职场文书
培训计划通知
2015/07/15 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python