Бан по IP-адресу средствами PHPИсточник: codeguru
Так уж сложилось у веб-мастеров, что на их сайты заходят как пользователи, так и спамерские роботы. Если первые заходят на сайт для поиска нужной информации, то вторым непременно подавай адреса e-mail'ов. Так называемые флудеры, которым попросту от нечего делать или от небольшого интеллекта так и хочется завалить ваши новости, статьи бестолковой лексикой. Ну а форум сообщениями, явно не относящимися к тематике рассматриваемой темы. Это неизбежно, как и то что за ночью приходит день и наоборот. Но с этим нужно бороться - иначе ваши порядочные пользователи вовсе потеряют интерес к вашему сайту - можете не сомневаться. Самым простой метод противодействия данным явлениям - это банить таких посетителей по ip. Проще говоря, закрывать им доступ на ваш сайт. Данный метод пусть и не идеальная защита, но порядка 90% защиту он вам обеспечит. а это уже лучше, чем ничего. Далее рассмотрим, как данная техника защиты работает на практике и как ее можно реализовать на php. За дело Для начала нам нужно получить список ip-адресов, которым будет закрыт доступ на наш сайт. Еще потребуется использовать массивы и циклы - вот где нам и пригодится php. Дальше - больше :) Для получения ip-адреса посетителя можно использовать суперглобальную переменную $_SERVER['REMOTE_ADDR']. На php это реализуется следующим образом: $ip = $_SERVER['REMOTE_ADDR'];
А теперь разберемся с остальными переменными нашего мини-скрипта. Создаем массив ($ban), куда помещаем все забаненые ip: $ban = array('333.333.333.333','111.111.111.111');
Как видите, ip нужно помещать в одинарные кавычки и отделять их друг от друга запятой (все просто и ясно - за что я и люблю php) В следующая переменная ($count) будет занесено количество этих самых ip: $count = count($ban);
Для чего это все нужно - читайте дальше. Что мы имеем: 1) IP адрес определенного посетителя - переменная $ip; Все элементарно просто - берем и сверяем адрес $ip со списком запрещенных - а так как у нас их может быть несколько, то для этого понадобится обход всего массива забаненых адресов. Эту работу за нас легко проделает цикл for: for ($i=0; $i<$count; $i++) { if($ip == $ban[$i]) { die("I'm sorry, you've been banned. $ip"); } } ?> Вот и получается, что если проверяемый адрес совпадет с одним из наших "нехороших", то мы и дадим знать его обладателю - I'm sorry, you've been banned. 68.225.34.86. А вот и весь скрипт целиком - это для тех, кому лень его собирать по частям из статьи: $ip = $_SERVER['REMOTE_ADDR']; $ban = array('333.333.333.333','68.225.34.86'); $count = count($ban); for ($i=0; $i<$count; $i++) { if ($ip == $ban[$i]) { die("I'm sorry, you've been banned. $ip"); } } |