|
Так получилось, что на один из моих сайтов повадились постить спам. Причем постить весьма тупо - одно и тоже сообщение добавлять в руками комментарии, именно руками, тк менял название и id окон для ввода и кнопки отправки сообщения, но на спам это не влияло. Конечно можно было бы включить премодерацию и заходить каждый вечер на сайт проверять посты, но зачем напрягать себя из за каких то спаммеров? Спам шел с 2 IP, латвийского происхождения, я честным образом предупредил владельцев адресов по емайл (адресс посмотрел по ip lookup) о спаме и о том, что если не примут меры - сайт будет блокирован для этих адресов. А после следующего спамм сообщения занялся блокировкой сайта от дебилов-сеошников. Блокировки по IP решил делать для всего сайта, для этого я создал файл ip_ban.php следующего содержания:
<?php /* http://wm-help.net/ */ /* Сообщение при банне ip */ define("bann_message", "Для вашего IP: %ip% доступ к сайту закрыт. Обращайтесь за решением вопроса к своему провайдеру."); /* Предупреждение о возможности банна по ip */ define("wrong_message", "Вы предупреждены администратором данного сайта о возможной блокировке вашего IP: %ip% в случае дальнейшего нарушения правил."); /* массив с ip и типом блокировки. в ключе массива IP, в значении тип блокировки */ $bann_array = array( "188.92.76.208"=>"bann", //спамер в коменты латвия //"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(); ?>
|
А в файле index.php добавил такую строку include 'ip_ban.php'; IP добавляем в $bann_array (не забываем ставить запятую после предыдущего значения). Теперь, спамер, при попытке зайти на сайт получает уведомление о том, что он не может зайти по причине блокировки. Если произойдет блокировка пользователей какой либо подсети или региона - то вздрючат провайдера, провайдер отпишется мне (или найдет письмо от меня) и будет конструктивный разговор о спамме с данных ip адресов. Сам скрипт не мой, нашел в просторах интернета, на авторство скрипта не претендую. По хорошему, этим скриптом надо блокировать такие вещи как форум и комментарии, но разбираться было лениво, да и смысла давать доступ спаммерам к своему ресурсу я не вижу. Конечно, можно обойти скрипт используя анонимайзеры и прокси, но добавить ip в скрипт - дело 10 секунд :) Кризису нет - Деньги с Интернета |