php防止网站被攻击的应急代码_php实例

前不久一个网站竟然被攻击,数据库被刷掉了,幸好客户机器上有数据库备份。遇到这么严重的问题,必须抓紧找出漏洞,防止再次被攻击。各方面检查之后发现除了服务器需要设置正确之外,其他无从下手,只好从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
, 网站
攻击
java防止xss攻击代码、php防止xss攻击代码、防止校园欺凌应急预案、防止踩踏疏散应急预案、煤矿应急避险逃生实例,以便于您获取更多的相关知识。

时间: 2024-08-29 07:19:34

php防止网站被攻击的应急代码_php实例的相关文章

基于Snoopy的PHP近似完美获取网站编码的代码_php实例

先要到网上下载Snoopy.class.php 调用方法: 复制代码 代码如下: <?php require 'lib/Snoopy.class.php'; require 'lib/WebCrawl.class.php';//包含下面代码 $go=new WebCrawl('http://www.baidu.com'); echo $go->getCharset(); ?> 复制代码 代码如下: <?php class WebCrawl { private $url; priva

php抓取并保存网站图片的实现代码_php技巧

此程序实现了网页源代码捕获,图片链接获取.分析.并将同样的图片链接合并功能,实现了图片抓取功能.利用php强大的网络内容处理函数将指定的网站上的所有图片抓取下来,保存在当前目录下,以下为代码: <?php /*完成网页内容捕获功能*/ function get_img_url($site_name){ $site_fd = fopen($site_name, "r"); $site_content = ""; while (!feof($site_fd)) {

PHP中通过语义URL防止网站被攻击的方法分享_php技巧

什么是语义URL 攻击? 好奇心是很多攻击者的主要动机,语义URL 攻击就是一个很好的例子.此类攻击主要包括对URL 进行编辑以期发现一些有趣的事情. 例如,如果用户chris 点击了你的软件中的一个链接并到达了页面http://example.org/private.php?user=chris, 很自然地他可能会试图改变user的值,看看会发生什么.例如,他可能访问http://example.org/private.php?user=rasmus 来看一下他是否能看到其他人的信息.虽然对G

php判断终端是手机还是电脑访问网站的思路及代码_php技巧

代码一: 复制代码 代码如下: <?php function check_wap() { if (isset($_SERVER['HTTP_VIA'])) return true; if (isset($_SERVER['HTTP_X_NOKIA_CONNECTION_MODE'])) return true; if (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID'])) return true; if (strpos(strtoupper($_SERVER

PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码_php实例

1. 截取整个屏幕 Screenshot 复制代码 代码如下: <?php    $im = imagegrabscreen();    imagepng($im, "myscreenshot.png");    ?> 2. 截取一个窗口 Capture a window (IE for example) 复制代码 代码如下: <?php    $browser = new COM("InternetExplorer.Application"); 

CI框架无限级分类+递归的实现代码_php实例

CI是什么? CodeIgniter是一个轻量级但功能强大的PHP框架,基于MVC设计模式,提供了一套丰富的类库,简单易学,高效实用. 下面看下CI框架无限级分类+递归的实现代码,具体代码如下所示: //无级分类+递归 public function digui(){ $crr = $this->db->get('category')->result_array(); $list['type'] = $this->nolimit($crr,0,0); $this->load-

利用php抓取蜘蛛爬虫痕迹的示例代码_php实例

前言 相信许多的站长.博主可能最关心的无非就是自己网站的收录情况,一般情况下我们可以通过查看空间服务器的日志文件来查看搜索引擎到底爬取了我们哪些个页面,不过,如果用php代码分析web日志中蜘蛛爬虫痕迹,是比较好又比较直观方便操作的!下面是示例代码,有需要的朋友们下面来一起看看吧. 示例代码 <?php //获取蜘蛛爬虫名或防采集 function isSpider(){ $bots = array( 'Google' => 'googlebot', 'Baidu' => 'baidus

php mysql 封装类实例代码_php实例

废话不多说了,具体代码如下所示: <?php class mysql { private $db_host; //数据库主机 private $db_user; //数据库用户名 private $db_pwd; //数据库用户名密码 private $db_database; //数据库名 private $conn; //数据库连接标识; private $result; //执行query命令的结果资源标识 private $sql; //sql执行语句 private $row; //返

用PHP读取超大文件的实例代码_php实例

去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一下这些帐号信息.虽然这些数据信息都已经被"整理"过的,不过自己拿来学习也挺有用的,毕竟有这么大的数据量. 数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机.用MSSQL的客户端也打不开这么大的SQL文件,直接报内存不足,原因据说是MSSQL在读取数据的时候,是一次性地将读取到的数据放在内存中,如果数据量过大,而内存不足,则会直接导致系统瘫掉.