Блокировка по айпи через htaccess

Discussion in 'PHP' started by Andrey15716, 2 Mar 2021.

  1. Andrey15716

    Andrey15716 New Member

    Joined:
    13 Jan 2017
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, помогите подправить скрипт. Нужно чтобы каждый третий переход на сайт в течении 10 минут банился, сохраняя функцию отправки уведомления на ящик

    <?

    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s")." GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Cache-Control: post-check=0,pre-check=0", false);
    header("Cache-Control: max-age=0", false);
    header("Pragma: no-cache");
    $tomail = '[email protected]'; // email владельца сайта
    $frommail = '[email protected]'; // условный email отправителя
    $date = date('d.m.Y H:i:s');
    $ip = $_SERVER['REMOTE_ADDR'];
    $url = $_SERVER['REQUEST_URI'];
    $useragent = $_SERVER['HTTP_USER_AGENT'];
    $refer = $_SERVER['HTTP_REFERER'];

    $ban = "# ".$date." ".$url." \r\nDeny from ".$ip." \r\n"; // эта строка запишется в .htaccess
    $htaccess = $_SERVER['DOCUMENT_ROOT'].'/.htaccess'; // путь до .htaccess
    $str = file_get_contents($htaccess);
    $fn = 'Deny from '.$ip;
    $pos = strpos($str,$fn);
    // если IP-адрес не забанен в .htaccess
    if ($pos === false)
    {
    $o = fopen($htaccess, "a+"); // открывает .htaccess
    fputs($o, $ban); // пишет строку о бане
    // уведомление на email админа сайта
    mail (
    $tomail,
    'Новый бан! ('.$url.')',
    'дата: '.$date.' | IP: '.$ip."\r\n".'юзерагент: '.$useragent."\r\n".'Запрос: '.$url.' | реферал: '.$refer,
    'From:'.$frommail
    );
    fclose($o);
    // показывает нарушителю страницу с уведомлением о бане
    echo '
    <html><head></head><body style="background:#363636;font-family:Century Gothic;color:#CFCFCF">
    <div style="position:fixed;top:25%;left:25%;width:400px;height:400px;top:expression((document.documentElement.scrollTop + screen.height/2 - 200) + \'px\');margin-left:-200px;"><span style="font-size:300px">БАН!</span></div>
    </body></html>
    ';
    }
    // если IP-адрес уже забанен в .htaccess
    else
    {
    // только уведомление на email админа сайта
    mail (
    $tomail,
    'Уже забанен ('.$ip.')',
    'дата: '.$date.' | IP: '.$ip."\r\n".'юзерагент: '.$useragent."\r\n".'Запрос: '.$url.' | реферал: '.$refer,
    'From:'.$frommail
    );
    }
    ?>
     
  2. Aligator

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

    Joined:
    24 Nov 2006
    Messages:
    138
    Likes Received:
    15
    Reputations:
    0
    Ну так создай куку со временем жизни 10 минут, каждый раз при запуске скрипта инкриминируй ее значение. Потом просто проверяешь, если есть кука и значение > 3 {бан}
     
    CyberTro1n likes this.
  3. Andrey15716

    Andrey15716 New Member

    Joined:
    13 Jan 2017
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    я неочень в программировании) если поможешь буду благодарен.
     
  4. CyberTro1n

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

    Joined:
    20 Feb 2016
    Messages:
    1,074
    Likes Received:
    850
    Reputations:
    14
    Ооу :D