Защита сайта. Блокировка ip адреса

Автор: Беляев Александр
Сайт Автора: wm-help.net
E-mail Автора: [email protected]
Дата написания: 28.10.2006
    Сейчас в интернете очень активно спамят посещаемые и не очень интернет-ресурсы различных направлений и тематик. Несмотря на множество всевозможных способов защиты, расположенных на большинстве сайтов, спамеров остановить не всегда получается. Иногда они вручную или в полуавтоматическом режиме заполняют формы в гостевых, форумах, комментариях…, причем настолько нагло рекламируют себя или свой сайт, что диву даешься от их беспринципности. И от таких посягательств на "чистоту" вашего контента, а как следствие и сайта в целом, зачастую спасает только блокировка ip адреса спамера.     На мой взгляд, блокировка по ip – очень эффективный метод борьбы со спамом, но применять его можно только в крайних случаях, например, когда с одного и того же ip вас спамили больше двух-трех раз. Использовать этот метод нужно крайне осторожно, дабы случайно не закрыть доступ к вашему сайту для поисковых машин, которые составляют основную часть трафика любого сайта.

    В этой статье рассмотрен простейший php-скрипт, который имеет два уровня защиты сайта: предупреждение спамера о том, что ему не поздоровится, если он еще раз наспамит и полная блокировка доступа к сайту по ip. Единственным минусом блокировки по ip является то, что спамер может пользоваться бесплатным и общедоступным прокси-сервером, и если забаннить сервер с этим ip, то к вашему сайту не смогут получить доступ и те, кто использует его исключительно в мирных целях. Поэтому прежде чем банить смотрите, кто есть кто через сервис whois.

    А вот и сам php-код простейшего скрипта для блокировки пользователя по ip:
<?php
/* https://wm-help.net/ */
/* Сообщение при банне ip */
define("bann_message", "Для вашего IP: %ip% доступ к сайту закрыт.");
 
/* Предупреждение о возможности банна по ip */
define("wrong_message", "Вы предупреждены администратором данного сайта о возможной блокировке вашего IP: %ip% в случае дальнейшего нарушения правил.");
 
/* массив с ip и типом блокировки. в ключе массива IP, в значении тип блокировки */
$bann_array = array(
                    "195.66.203.247"=>"bann", // реальный плохой IP
                    "220.94.220.60"=>"bann"// реальный плохой IP
                    //"127.0.0.1"=>"wrong"      // Test
                    );
 
/* Функция для почти 100% определения IP адреса посетителя. */
/* Перебирает все возможные переменные с IP. */
function _ip()
{
  if(isset($HTTP_SERVER_VARS)) {
    if(isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])) {
    $realip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
    }elseif(isset($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])) {
      $realip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
    }else{
      $realip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
    }
  }else{
  if(getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
    $realip = getenv( 'HTTP_X_FORWARDED_FOR' );
  }elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
    $realip = getenv( 'HTTP_CLIENT_IP' );
  }else {
    $realip = getenv( 'REMOTE_ADDR' );
  }
}
return $realip;
}
 
/* Определяет, что делать с владельцем того или иного ip адреса */
function bann_on_not_to_bann()
{
    global $bann_array; // получаем массив с ip адресами
    $user_ip = _ip();   // получаем ip
 
/* разбираем массив на ключ и значение */
foreach($bann_array as $ip=>$type)
{
    if ($ip == $user_ip) // проверяем
    {
        switch($type) // если ip совпал то смотрим что делать
        {
            case "wrong": // предупреждение
            {
                echo str_replace("%ip%", $user_ip, wrong_message); // выводим предупреждение
                break; // выход из switch
            }
            case "bann": // блокировка
            {
                die(str_replace("%ip%", $user_ip, bann_message)); // Сообщение о том, что доступ закрыт + завершение работы php
                // break не требуется т.к. дальше уже ничего не выполняется
            }
        }
    }
}
}
 
/* проверяем владельца ip и блокируем\предупреждаем если это спамер */
bann_on_not_to_bann();
?>
 

    Для того, чтобы использовать данный скрипт блокировки ip адресов создайте php-файл ip_bann.php и поместите в него весь код скрипта, который вы видите выше. Затем в самом начале основного скрипта, обычно это index.php допишите строчку:
 include 'ip_bann.php';

    Так же этот php-скрипт можно использовать для блокировки ip непосредственно в скриптах отвечающих за добавление сообщений пользователей на ваш сайт, а не повсеместно, данный вариант иногда бывает даже лучше.

Источник: https://wm-help.net/my-articles/article/protect-site.ip-blok.htmPage copy protected against web site content infringement by Copyscape
Перепечатка данной статьи разрешается только при письменном(e-mail) разрешении автора (Беляева Александра Дмитриевича) и при полном сохранении исходного вида статьи (ссылки, авторские реферальные ссылки, e-mail'ы, форматирование текста, ...), а так же указания точных данных об авторстве (данные автора + прямая [без редиректа и не закрытая от индексации] ссылка на статью).
В случае не выполнения данных правил, возможно применение «особых» мер, к нарушителям.