Сейчас в интернете очень активно спамят посещаемые и не очень интернет-ресурсы различных направлений и тематик. Несмотря на множество всевозможных способов защиты, расположенных на большинстве сайтов, спамеров остановить не всегда получается. Иногда они вручную или в полуавтоматическом режиме заполняют формы в гостевых, форумах, комментариях…, причем настолько нагло рекламируют себя или свой сайт, что диву даешься от их беспринципности. И от таких посягательств на "чистоту" вашего контента, а как следствие и сайта в целом, зачастую спасает только блокировка ip адреса спамера. На мой взгляд, блокировка по ip – очень эффективный метод борьбы со спамом, но применять его можно только в крайних случаях, например, когда с одного и того же ip вас спамили больше двух-трех раз. Использовать этот метод нужно крайне осторожно, дабы случайно не закрыть доступ к вашему сайту для поисковых машин, которые составляют основную часть трафика любого сайта.
В этой статье рассмотрен простейший php-скрипт, который имеет два уровня защиты сайта: предупреждение спамера о том, что ему не поздоровится, если он еще раз наспамит и полная блокировка доступа к сайту по ip. Единственным минусом блокировки по ipявляется то, что спамер может пользоваться бесплатным и общедоступным прокси-сервером, и если забаннить сервер с этим ip, то к вашему сайту не смогут получить доступ и те, кто использует его исключительно в мирных целях. Поэтому прежде чем банить смотрите, кто есть кто через сервис whois.
А вот и сам php-код простейшего скрипта для блокировки пользователя по ip:
<?php /* http://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 непосредственно в скриптах отвечающих за добавление сообщений пользователей на ваш сайт, а не повсеместно, данный вариант иногда бывает даже лучше.