Тема: php ip ban
Показать сообщение отдельно

  #7  
Старый 20.03.2008, 16:24
~X3RiX~
Banned
Регистрация: 14.03.2008
Сообщений: 36
С нами: 9557606

Репутация: 9
По умолчанию

Цитата:
Сообщение от noisia  
Нужен скрипт который бы при обращении на страницу в течении 5 секунд 3 раза, банил на 20 минут.
скрипт работает на файлах

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!");
    }
}

?>

Последний раз редактировалось ~X3RiX~; 20.03.2008 в 17:48..
 
Ответить с цитированием