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
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
简单的php 验证图片生成函数
May 21 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
thinkphp的c方法使用示例
Feb 24 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 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中通过fopen()函数访问远程文件示例
2014/11/18 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Python 如何测试文件是否存在
2020/07/31 Python
党员学习十八大感想
2014/01/17 职场文书
公司门卫管理制度
2014/02/01 职场文书
分层教学实施方案
2014/03/19 职场文书
安全目标管理责任书
2014/07/25 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
公司收款委托书范本
2014/09/20 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
先进班组事迹材料
2014/12/25 职场文书
先进工作者个人总结
2015/02/15 职场文书
python flask框架快速入门
2021/05/14 Python
使用Redis实现分布式锁的方法
2022/06/16 Redis