Сейчас: 10:06:54   29-го марта 2024 г.
UsefulScript.ruСкриптыЗащита сайтаСкрипт защиты от ботов
10
60

Скрипт защиты от ботов, спам ботов и авто ботов

После того, как Вы создали свой сайт, необходимо его защитить от различных ботов. Боты могут быть самые разные и цели у них могут быть совершенно разные (СПАМ, выкачивание сайта и т.д.). Ранее мы уже рассматривали скрипт Автобан, или как автоматически заблокировать доступ к сайту. Тот скрипт позволяет блокировать IP адреса, которые слишком часто обращаются к страницам сайта.


Теперь давайте рассмотрим новый скрипт, который позволяет "вычислить" как СПАМ ботов, так и авто ботов и закрыть им доступ на весь сайт.


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


Для начала создайте папку bad_bot в корне сайта. В папке bad_bot создайте четыре файла:

1) black_list.dat - изначально пустой файл, в который будет помещаться информация о ботах, "попавших в ловушку";

2) pixel.gif - прозрачный файл размером в один пиксель. Простой человек его не видит, но только не бот. Скачать данный файл Вы можете по ссылке;

3) black_list.php - страничка, со скриптом перейдя на которую бот будет "в ловушке", а вся необходимая информация о боте будет помещена в файл black_list.dat;

4) index.php - скрипт, проверяющий есть ли данный IP в списке ботов. Если есть, то доступ для данного IP блокируется.


Теперь поместите в файл black_list.php следующий код:

PHP код:
<?php
echo '<html><body><p>Как Вы сюда попали?</p>';
echo 
'<p><a href="http://Ваш_домен.ru/">вернуться на главную страницу</a></p>';

if(
phpversion() >= "4.2.0"extract($_SERVER);
$bad_bot 0;
/* Смотрим, имеется ли такой же IP в базе */
$file_name "black_list.dat";
$fp fopen($file_name"r") or die ("Ошибка файла<br>");
while (
$line fgets($fp255)) {
 
$u explode(" "$line);
 if (
preg_match("/".$u[0]."/"$REMOTE_ADDR)) $bad_bot++;
}
fclose($fp);
if (
$bad_bot == 0) {
$tmestamp time();
$datum date("H:i:s d.m.Y",$tmestamp);
/* отсылаем отчет на email */
$to "Ваш почтовый ящик";
$subject "Заголовок сообщения";
$msg "Пришёл с $REQUEST_URI $datum IP: $REMOTE_ADDR, User-агент $HTTP_USER_AGENT";
mail($to$subject$msg);
/* Если отсылать отчет на email не надо, то 4 строки выше можно удалить*/

/* Добавляем запись в файл black_list.dat */
$fp fopen($file_name,'a+');
fwrite($fp,"$REMOTE_ADDR $datum $REQUEST_URI $HTTP_REFERER $HTTP_USER_AGENT\r\n");
fclose($fp);
}
echo 
'</body></html>';
?>

Далее в файл index.php поместите следующий код:

PHP код:
<?php
if(phpversion() >= "4.2.0"extract($_SERVER);
$bad_bot 0;
/* перебираем все записи в файле black_list.dat */
$file_name "bad_bot/black_list.dat";
$fp fopen($file_name"r") or die ("Ошибка файла<br>");
while (
$line fgets($fp255)) {
 
$data explode(" "$line);
 if (
preg_match("/".$data[0]."/"$REMOTE_ADDR)) $bad_bot++;
}
fclose($fp);
if (
$bad_bot 0) { /* это бот и мы запрещаем ему вход на сайт */
sleep(3);            /* задержка загрузки странички */
echo '<html><head>';
echo 
'<title>Сайт временно недоступен.</title>';
echo 
'</head><body>';
echo 
'<h1>Сайт временно недоступен!</h1><br>';
echo 
'<p>Приносим свои извинения ...</p>';
echo 
'</body></html>';
exit;
}
?>

Обязательно в файле robots.txt запрещаем индексацию данной папки путем добавления строчки:

Цитата:
disallow: /bad_bot/

Теперь для защиты вашего сайта от ботов, на всех страницах сайта разместите не видимую ссылку следующим образом:

HTML код:
<a href="bad_bot/black_list.php">
 <
img src="bad_bot/pixel.gif" alt="" width="1" height="1">
</
a>

Перед выводом каждой странички необходимо постоянно проверять содержимое файла black_list.dat, чтобы отсеивать "попавшихся" ботов. Для этого просто добавьте на все странички своего следующий код:

PHP код:
<?php include("bad_bot/index.php"); ?>

Файлу blacklist.dat необходимо дать на сервере права доступа для чтения и записи – 666.


Скачать папку со скриптом целиком можно в одном архиве по ссылке - Скрипт защиты от ботов, спам ботов и авто ботов. Использовать данный скрипт необходимо с осторожностью, т.к. он может заблокировать и некоторых "хороших" ботов. Например, ботов, которые создают карту Вашего сайта.

Дата создания: 16:11:52 09.01.2012 г.
Дата обновления: 22:36:47 08.03.2012 г.
Посещений: 22187 раз(а).

Комментарии посетителей (23 шт.):
Дмитрий
0
# 335
(16:18:19  07.10.2012 г.)

Я так понимаю, что "хорошие боты" типа гоши, яши и др. не попадут под действие этого скрипта, потому как читают robots.txt и не будут "ломиться" в эту папку?
Ответить

Administrator
0
# 570
(17:45:18  27.01.2013 г.)

Дмитрий, Вы все верно поняли, т.к. "нормальные" боты соблюдают robots.txt, а все боты, которые не соблюдают robots.txt, попадут в ловушку.
Ответить

Андрей
0
# 624
(10:45:57  18.02.2013 г.)

Этот скрипт поможет от автоматических комментариев и регистраций?
И еще не пойму, Вы пишите на все страницы сайта, а поподробней.
Ведь есть шаблон сайта как быть с файлами, например, main.tpl, registration.tpl, и как основной файл сайта index.php.
Ответить

Administrator
0
# 627
(22:02:02  18.02.2013 г.)

Боюсь что от СПАМа в комментариях и авторегистраций скрипт не эффективен. Скрипт больше ориентирован на защиту от скачивания сайта. Если Ваш сайт создан на одной из CMS, то конечно проще добавить ссылку в шаблон, и она автоматически появится на всех страницах сайта.
Ответить

Илья
0
# 1029
(20:33:41  08.08.2013 г.)

Есть какие-то особенности, если сайт построен на prestashop? Сам сайт (интернет-магазин) находится на виртуальном хостинге. Спрашиваю, потому что этот скрипт, а также автобан не работают у меня. В автобане вот такая история: В all_visits записывается всё, а в black_list_ip ничего не идёт и .htaccess пустой.
Ответить

Геннадий
0
# 1049
(23:19:53  17.08.2013 г.)

Данный скрипт работает где и как угодно и с любой CMS, главное условие - это поддержка хостером PHP. И ещё добавлю, от спама в комментариях скрипт спасает если спам придёт на сайт повторно (первый раз спам бот был и поэтому уже попал в базу), а если бот придёт первый раз, то как повезёт - или сразу будет заблокирован, или успеет нагадить. Я это проверял у себя на сайте.
Ответить

Магомед
0
# 1173
(18:45:27  02.10.2013 г.)

Спасибо Админ, все работает отлично. Один вопрос, в базу заносятся боты от гугла, как сделать, чтобы не блокировало этих ботов? Дать им зеленый свет, как бы.
Ответить

Administrator
4
# 1175
(19:40:59  02.10.2013 г.)

Вы прописали в файле robots.txt запрет на индексацию для ботов (disallow: /bad_bot/)? Если да, и это не помогло, то можно добавить условие на проверку популярных ботов в файл black_list.php.
Для этого после <?php добавьте:
$agent = $_SERVER['HTTP_USER_AGENT'];
if (strpos($agent, 'Googlebot')===false and strpos($agent, 'YandexBot')===false) {
И не забудьте в конце перед тегом ?> закрыть фигурную скобку "}".
Ответить

Магомед
0
# 1176
(20:04:44  02.10.2013 г.)

Администратор, спасибо! Да, был случай в блак лист упал бот от гугла, и в робот запрет на индексацию.
По поводу закрыть скобку, теперь их две после exit;
Ответить

Administrator
0
# 1177
(20:11:28  02.10.2013 г.)

Да, все верно, скобок станет две.
Ответить

Данил
0
# 1498
(23:13:16  27.02.2014 г.)

Вечер добрый! Я заметил, что на сайте сидит посторонний бот с разных IP адресов. И поможет ли этот скрипт моему сайту? Что нужно сделать, чтоб закрыть доступ этому боту или роботу?
Ответить

Алексей
0
# 2075
(14:13:35  29.11.2014 г.)

Доброе время суток, все работает, но в том случае если все страницы в корне, а если в папке, то не работает.
<a href="../bad_bot/black_list.php">
<img src="../bad_bot/pixel.gif" alt="" width="1" height="1">
</a>.
Что делаю не так?
Ответить

Administrator
0
# 2079
(23:26:25  29.11.2014 г.)

Попробуйте добавить в шапку сайта в контейнер <head></head> тег <base> для работы с относительными URL. Например: <base href="http://usefulscript.ru/">
Ответить

Алексей
0
# 2082
(12:31:13  30.11.2014 г.)

Добавлял в шапку сайта <base href="http://example.ru/">, но без результата, вытаскивал страницу из папки и помещал в корень. Все OK.
Сообщение об ошибке:
Warning: fopen(bot/black_list.dat) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory in D:\Site\OpenServer\domains\example.ru\www\bot\index.php on line 6.
Ответить

Administrator
0
# 2086
(19:26:38  30.11.2014 г.)

Так в ошибке говорится же о невозможности открытия файла black_list.dat по указанному пути. У Вас почему-то путь такой: "bot/black_list.dat". Создайте в папке "bad_bot" пустой файл "black_list.dat" и в index.php укажите переменную: $file_name = "../bad_bot/black_list.dat";
Дальнейшее обсуждение данной проблемы перенес на наш форум.
Ответить

Александр
0
# 3586
(21:14:12  23.11.2016 г.)

Все работает, все видит. Вопрос. Загрузил файлы с исходника с изменениями. При проверке (открытия файлов) не соответствовала кодировка. Изменил в файлах кодировку на utf-8, открыл ссылку ="../bad_bot/black_list.php", все нормально. Но при возврате на сайт не пускает. Попробовал через другой браузер тоже самое. Почему так? Подскажите. С уважением Александр.
Ответить

Administrator
2
# 3587
(21:56:32  23.11.2016 г.)

Все верно. black_list.php - страничка "ловушка" для ботов. Доступ для тех, кто посетил данную страничку блокируется по IP. Чтобы открыть доступ для конкретного IP - удалите его из файла black_list.dat.
Ответить

Владимир
0
# 3840
(07:40:04  20.04.2017 г.)

Реально работает, уже двух гадов поймал. С сайта вирус, создателю респект! Вот что приходит на почту с хоста где сайт. Пришёл с /bad_bot/black_list.php 06:29:57 20.04.2017 IP: 194.58.115.168, User-агент Virusdie crawler/3.0
Ответить

Евгений
0
# 4052
(12:23:37  19.08.2017 г.)

Что-то ошибка 500 выходит, когда я сайт.ру/bad_bot/black_list.php перехожу. Что исправить?
Ответить

Павел
0
# 4137
(13:59:44  19.11.2017 г.)

Евгений, голову исправь xD
Ты ведь сам себя в роботы записал, открыв этот файл :D
Ответить

Алексей
-1
# 4261
(14:03:43  15.03.2018 г.)

Этот скрипт постоянно меня самого блокирует и заносит в список мой IP.
213.141.xxx.xxx 13:51:10 15.03.2018 /bad_bot/black_list.php Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
(последние цифры айпишника я изменил, чтобы не светить его здесь)

Я просматриваю свой сайт с браузера мозилла, любую доступную страницу, не лезу по ссылке гифки. Просто смотрю сайт как обычный пользователь и меня блокирует.
Почему меня то блокирует?

Так же заблокировал двух ботов bing. Или они полезли в запрещенную папку по ссылке гифки или их скрипт заблокировал так же, как и меня, по ошибке.
Доверия скрипту теперь нет.
Ответить

Сергей
0
# 4318
(18:58:21  01.07.2018 г.)

Здравствуйте!
Спасибо. Всё работает. Но, если я заходил на страницу ловушку, то потом даже удалив IP из файла dat, то система потом не пускает на страницу (пишет ошибка страницы) даже после перезагрузки браузера. Пока не удалю со страницы инлюде для проверки при загрузке, на страницу не зайти. Такое ощущение, что IP сохраняется где-то ещё, но ведь на самом деле такого нет. Что делать?
Спасибо. С уважением.
Ответить

Денис
0
# 4524
(10:52:44  11.10.2019 г.)

Как доработать скрипт, чтобы боты не блокировались автоматически, а просто собиралась инфа о них в black_list.dat и отсылалось E-Mail уведомление. Для того чтобы принимать решение о блокировке вручную.
Ответить

Закрыть
Ваше имя:
824 + 13 =
Добавить комментарий:
Ваше имя:
824 + 13 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 4

Какой браузер Вы используете?