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 08 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
CI框架整合smarty步骤详解
May 19 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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
中英文字符串翻转函数
2008/12/09 PHP
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
PHP中cookie知识点学习
2018/05/06 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
python写的ARP攻击代码实例
2014/06/04 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python实现学校管理系统
2018/01/11 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
Django接收自定义http header过程详解
2019/08/23 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
用python制作个音乐下载器
2021/01/30 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
入党综合考察材料
2014/06/02 职场文书
工作态度怎么写
2015/06/25 职场文书
婚庆主持词大全
2015/06/30 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis