Maison >développement back-end >tutoriel php >PHP empêche les attaques sur les sites Web en interdisant les accès IP fréquents

PHP empêche les attaques sur les sites Web en interdisant les accès IP fréquents

墨辰丷
墨辰丷original
2018-06-06 17:40:125433parcourir

Cet article présente principalement PHP pour empêcher le site Web d'être attaqué en interdisant les accès IP fréquents. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Si vous constatez qu'une certaine adresse IP accède trop fréquemment au site Web, ajoutez-la à la liste noire et interdisez l'accès. Ce n'est pas une bonne solution, mais en cas d'urgence, il n'y a pas de meilleure solution. mesure provisoire. À l’avenir, faisons des recherches plus approfondies.

<?php 
header(&#39;Content-type: text/html; charset=utf-8&#39;); 
$ip=$_SERVER[&#39;REMOTE_ADDR&#39;];//获取当前访问者的ip 
$logFilePath=&#39;./log/&#39;;//日志记录文件保存目录 
$fileht=&#39;.htaccess2&#39;;//被禁止的ip记录文件 
$allowtime=60;//防刷新时间 
$allownum=5;//防刷新次数 
$allowRefresh=120;//在允许刷新次数之后加入禁止ip文件中 
 
if(!file_exists($fileht)){ 
  file_put_contents($fileht,&#39;&#39;); 
} 
$filehtarr=@file($fileht); 
if(in_array($ip."\r\n",$filehtarr)){ 
  exit(&#39;警告:你的IP已经被禁止了!&#39;); 
} 
//加入禁止ip 
$time=time(); 
$fileforbid=$logFilePath.&#39;forbidchk.dat&#39;; 
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=&#39;&#39;; 
$file=$logFilePath.&#39;ipdate.dat&#39;; 
if(!file_exists($logFilePath)&&!is_dir($logFilePath)){ 
  mkdir($logFilePath,0777); 
} 
if(!file_exists($file)){ 
  file_put_contents($file,&#39;&#39;); 
} 
$uri=$_SERVER[&#39;REQUEST_URI&#39;];//获取当前访问的网页文件地址 
$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.&#39;forbided_ip.log&#39;,$ip.&#39;--&#39;.date(&#39;Y-m-d H:i:s&#39;,time()).&#39;--&#39;.$uri."\r\n",FILE_APPEND); 
        $timepass=$timetem+$allowtime-$time; 
        exit(&#39;警告:不要刷新的太频繁!&#39;); 
      } 
    } 
  } 
} 
if($yesno){ 
  $str.=$checkip.$checkuri.$time."\r\n"; 
} 
file_put_contents($file,$str);

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Explication détaillée du principe OpCode en PHP

Exemple d'analyse du cycle d'exécution du principe PHP

Explication détaillée de la structure du répertoire du code source PHP et de la description des fonctions

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn