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
第三节--定义一个类
Nov 16 PHP
php笔记之:AOP的应用
Apr 24 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 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抓取https的内容的代码
2010/04/06 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php防止伪造数据从地址栏URL提交的方法
2014/08/24 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
Python 字典dict使用介绍
2014/11/30 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
django迁移数据库错误问题解决
2019/07/29 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
小学一年级评语大全
2014/04/22 职场文书
企业文化口号
2014/06/12 职场文书
煤矿安全协议书
2014/08/20 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
休假证明书
2015/06/24 职场文书