• PHP禁止同一IP频繁访问以防止网站被防攻击或采集的代码


    PHP禁止同一IP频繁访问以防止网站被防攻击或采集的代码

    <?php

    /* 
    *通过禁止IP频繁访问防止网站被防攻击代码
    *design by www.scutephp.com
    */
    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." ",$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." ",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." ";
    }else if($numtem<$allownum){
    $str.=$iptem.$uritem.$timetem.($numtem+1)." ";
    }
    else{
    if(!file_exists($fileforbid)){
    $addforbidarr=array($ip." ",time()." ",1);
    file_put_contents($fileforbid,$addforbidarr);
    }
    file_put_contents($logFilePath.'forbided_ip.log',$ip.'--'.date('Y-m-d H:i:s',time()).'--'.$uri." ",FILE_APPEND);
    $timepass=$timetem+$allowtime-$time;
    exit('警告:不要刷新的太频繁!');
    }
    }
    }
    }
    if($yesno){
    $str.=$checkip.$checkuri.$time." ";
    }
    file_put_contents($file,$str);
  • 相关阅读:
    重新安装AD RMS
    Exp00009错误解決
    AD RMS 问题解决 事件ID:139
    如何破解微软的正版增值烦恼
    如何批量更改帐号的属性
    ORA31694,原来是文件有问题
    Standby异常解决
    ASP.NET 常用网站
    .NET C#读取Excel内容
    AD Usre lastLogon Time
  • 原文地址:https://www.cnblogs.com/yubolin/p/6024771.html
Copyright © 2020-2023  润新知