Рассмотрим скрипт, который позволяет «вычислить» как спам-ботов, так и авто-ботов и закрывать им доступ на весь сайт.
Всех «нехороших» ботов объединяет следующее: попадая на любую страницу сайта, подобные боты первым делом пробегаются по всем ссылкам на страничке для того, чтобы выяснить, где еще можно наспамить или что-нибудь скачать. Вот на этом и будет основан наш скрипт защиты от ботов.
Для начала создайте папку bad_bot в корне сайта. В папке bad_bot создайте четыре файла:
1) black_list.dat — изначально пустой файл, в который будет помещаться информация о ботах, «попавших в ловушку»;
2) pixel.gif — прозрачный файл размером в 1 пиксель. Простой человек его не видит, но только не бот. Скачать данный файл Вы можете по ссылке;
3) black_list.php — страничка, со скриптом перейдя на которую бот будет «в ловушке», а вся необходимая информация о боте будет помещена в файл black_list.dat;
4) index.php — скрипт, проверяющий есть ли данный IP в списке ботов. Если есть, то доступ для данного IP блокируется.
Теперь поместите в файл black_list.php следующий код:
<?php
echo '<html><body><p>Как Вы сюда попали?</p>';
echo '<p><a href="https://Ваш_домен.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 ("Ошибка, файл black_list.dat не найден <br>");
while ($line = fgets($fp, 255)) {
$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 = "ваш@email.ru";
$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
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 ("Ошибка, файл black_list.dat не найден<br>несуществующий путь<br>");
while ($line = fgets($fp, 255)) {
$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><br>';
echo '<center><h1>Сайт временно недоступен!</h1></center><br>';
echo '<p><center>Приносим свои извинения ...</center></p><br>';
echo '</body></html>';
exit;
}
?>
Обязательно в файле robots.txt запрещаем индексацию данной папки путем добавления строчки:
disallow: /bad_bot/
Теперь для защиты вашего сайта от ботов, на всех страницах сайта разместите невидимую ссылку следующим образом:
<a href="https://Baш_домен.ru/bad_bot/black_list.php">
<img src="https://Baш_домен.ru/bad_bot/pixel.gif" border="0" alt="" width="1" height="1">
</a>
Перед выводом каждой странички необходимо постоянно проверять содержимое файла black_list.dat, чтобы отсеивать «попавшихся» ботов. Для этого просто добавьте на все странички следующий код:
<?php include("https://Baш_домен.ru/bad_bot/index.php"); ?>
Файлу blacklist.dat необходимо дать на сервере права доступа для чтения и записи – 666.
Использовать данный скрипт необходимо с осторожностью, т.к. он может заблокировать и некоторых «хороших» ботов. Например, ботов, которые создают карту Вашего сайта.
[endtxt]