Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   php ip ban (https://forum.antichat.xyz/showthread.php?t=64576)

noisia 17.03.2008 16:41

php ip ban
 
Нужен скрипт который бы при обращении на страницу в течении 5 секунд 3 раза, банил на 20 минут.

Isis 17.03.2008 17:19

доступ к фаеру есть?
ОСь какая?

lsass.exe 17.03.2008 17:27

https://forum.antichat.ru/thread48981.html
частично сорцы оттуда заюзать можешь

x88x 18.03.2008 12:59

Цитата:

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

при обращении с одного ip-шника или с разных?

noisia 18.03.2008 13:13

одного

Flame of Soul 19.03.2008 00:13

Не самая удачная реализация но всеже)

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; } }
}
?>


~X3RiX~ 20.03.2008 16:24

Цитата:

Сообщение от 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($handle1024);
            
$ChA explode("#"$line);
            if(
$ChA[0] == "$ip")
            {
                if(
$ChA[1] > time() - 5)
                {
                    
$Chdet++;
                    
                    if(
$Chdet == 3)
                    {
                        
$this->true;
                        
$this->Ban($iptime());
                        break;
                    }
                }
            }
        }
        
        
fclose($handle);
        return 
$this->r;
    }
    
    function 
Ban($ip$time)
    {
        global 
$BFile;
     
        
$handle fopen($BFile"r");
        
        while(!
feof($handle))
        {
            
$line fgets($handle1024);
            
            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($handle1024);
                
                
$BA explode("*"$line);
                
                if(
preg_match("/$ip/"$line) !== 0)
                {
                    if(
$BA[1] > time() - 1200)
                    {
                        
$this->true;
                        break;
                    }
                }
            }
        }
        return 
$this->r;
    }
}

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

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

?>

:rolleyes:


Время: 15:18