php ip ban

Discussion in 'PHP' started by noisia, 17 Mar 2008.

  1. noisia

    noisia Elder - Старейшина

    Joined:
    13 Mar 2007
    Messages:
    20
    Likes Received:
    10
    Reputations:
    0
    Нужен скрипт который бы при обращении на страницу в течении 5 секунд 3 раза, банил на 20 минут.
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    доступ к фаеру есть?
    ОСь какая?
     
  3. lsass.exe

    lsass.exe Elder - Старейшина

    Joined:
    5 Aug 2007
    Messages:
    156
    Likes Received:
    161
    Reputations:
    24
    /thread48981.html
    частично сорцы оттуда заюзать можешь
     
  4. x88x

    x88x Elder - Старейшина

    Joined:
    27 Nov 2007
    Messages:
    208
    Likes Received:
    119
    Reputations:
    16
    при обращении с одного ip-шника или с разных?
     
  5. noisia

    noisia Elder - Старейшина

    Joined:
    13 Mar 2007
    Messages:
    20
    Likes Received:
    10
    Reputations:
    0
    одного
     
  6. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    Не самая удачная реализация но всеже)

    PHP:
    <?
    $limit_time = 5;                    //за какое время сделано $click входов чтобы банить (в секундах)
    $ban_time = 20;                    //на сколько банить
    $click = 3;                        //сколько входов разрешено сделать за $limit_time
    $time = strftime("%M:%S", time());            //определяем время
    list ($minut,$sekund) = explode(":",$time);        //переводим к   нужной форме
    $ip_navhode = $REMOTE_ADDR;            //определяем айпи адресс


    session_name("testses");
    session_start();
    session_register("i");                    //храним количество входов
    session_register("m");                //храним значение минуты
    session_register("s");                    //храним значение секунды
    //session_register("p");                    //храним вспомогательное значение
    if ($m==''){$m=$minut;}                //если минута не была определена то определяем
    if ($s==''){$s=$sekund;}                //если секунда не была определена то определяем

    if ($i==0) {
    $s=$sekund;
    $m=$minut;
    }
    if (
    $i < $click)                         //если сделанно входов по проверке меньше максимума то считаем их
    { 
    $p=$i;
    $i=@$i+1;
    echo 
    "ok!";
    }
    else                            
    //если сделанно входов по проверке больше максимума
    {
    if  (
    $s<$sekund) {$raznost = ($sekund-$s);} else {$raznost = ($s-$sekund);}
    echo 
    $raznost;
    $s=$sekund;
    $m=$minut;
    if (
    $raznost<$limit_time) { echo '<META HTTP-EQUIV = "Refresh" CONTENT = "0; URL = ban.php">'; $i=0;} 
    else { if (
    $p<2){ echo "GO"; $i=0; $p=@$p+1; } else { echo "GO"; $i=2; } }
    }
    ?>
     
    #6 Flame of Soul, 18 Mar 2008
    Last edited: 18 Mar 2008
  7. ~X3RiX~

    ~X3RiX~ Banned

    Joined:
    14 Mar 2008
    Messages:
    22
    Likes Received:
    7
    Reputations:
    -5
    скрипт работает на файлах

    1. ChFile.txt
    2. BFile.txt

    вот сам код

    PHP:
    <?php

    $ChFile 
    = "ChFile.txt";
    $BFile = "BFile.txt";

    class 
    XBan
    {
        function 
    ChTime($ip)
        {
            global 
    $ChFile;
            
            
    $handle = fopen($ChFile, "a");
            
            
    fwrite($handle, $ip."#".time()."\r\n");
            
            
    fclose($handle);
            
            
    $handle = fopen($ChFile, "r");
            
            
    $Chdet = 0;
            
            while(!
    feof($handle))
            {
                
    $line = fgets($handle, 1024);
                
    $ChA = explode("#", $line);
                if(
    $ChA[0] == "$ip")
                {
                    if(
    $ChA[1] > time() - 5)
                    {
                        
    $Chdet++;
                        
                        if(
    $Chdet == 3)
                        {
                            
    $this->r = true;
                            
    $this->Ban($ip, time());
                            break;
                        }
                    }
                }
            }
            
            
    fclose($handle);
            return 
    $this->r;
        }
        
        function 
    Ban($ip, $time)
        {
            global 
    $BFile;
         
            
    $handle = fopen($BFile, "r");
            
            while(!
    feof($handle))
            {
                
    $line = fgets($handle, 1024);
                
                if(
    preg_match("/$ip/", $line) !== 1)
                {
                    if(
    strlen($line) > 0)
                    {
                        
    $lines[] = $line;
                    }
                }
            }
            
            
    fclose($handle);
            
            
    $handle = fopen($BFile, "w");

            for(
    $i = 0; $i < count($lines); $i++)
            {
                
    fwrite($handle, $lines[$i]."\r\n");
            }
            
            
    fwrite($handle, $ip."*".$time."\r\n");
            
            
    fclose($handle);
        }
        
        function 
    ChDet($ip)
        {
            global 
    $BFile;
            
            if(
    $handle = fopen($BFile, "r"))
            {
                while(!
    feof($handle))
                {
                    
    $line = fgets($handle, 1024);
                    
                    
    $BA = explode("*", $line);
                    
                    if(
    preg_match("/$ip/", $line) !== 0)
                    {
                        if(
    $BA[1] > time() - 1200)
                        {
                            
    $this->r = true;
                            break;
                        }
                    }
                }
            }
            return 
    $this->r;
        }
    }

    $RobotX = new XBan;
    $RobotX->UserIP = $_SERVER['REMOTE_ADDR'];
    $RobotX->r = false;

    if(
    $RobotX->ChDet($RobotX->UserIP) == true)
    {
        echo(
    "<h1>Forbidden</h1>");
    }
    else
    {
        if(
    $RobotX->ChTime($RobotX->UserIP) == true)
        {
            echo(
    "Stop!");
        }
        else
        {
            echo(
    "Ok!");
        }
    }

    ?>
    :rolleyes:
     
    #7 ~X3RiX~, 20 Mar 2008
    Last edited: 20 Mar 2008