Скрипт защиты от ботов, спам ботов и авто ботов
После того, как Вы создали свой сайт, необходимо его защитить от различных ботов. Боты могут быть самые разные и цели у них могут быть совершенно разные (СПАМ, выкачивание сайта и т.д.). Ранее мы уже рассматривали скрипт Автобан, или как автоматически заблокировать доступ к сайту. Тот скрипт позволяет блокировать 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
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($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 = "Ваш почтовый ящик";
$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 ("Ошибка файла<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>';
echo '<h1>Сайт временно недоступен!</h1><br>';
echo '<p>Приносим свои извинения ...</p>';
echo '</body></html>';
exit;
}
?>
Обязательно в файле robots.txt запрещаем индексацию данной папки путем добавления строчки:
disallow: /bad_bot/
Теперь для защиты вашего сайта от ботов, на всех страницах сайта разместите не видимую ссылку следующим образом:
<a href="bad_bot/black_list.php">
<img src="bad_bot/pixel.gif" alt="" width="1" height="1">
</a>
Перед выводом каждой странички необходимо постоянно проверять содержимое файла black_list.dat, чтобы отсеивать "попавшихся" ботов. Для этого просто добавьте на все странички своего следующий код:
<?php include("bad_bot/index.php"); ?>
Файлу blacklist.dat необходимо дать на сервере права доступа для чтения и записи – 666.
Скачать папку со скриптом целиком можно в одном архиве по ссылке - Скрипт защиты от ботов, спам ботов и авто ботов. Использовать данный скрипт необходимо с осторожностью, т.к. он может заблокировать и некоторых "хороших" ботов. Например, ботов, которые создают карту Вашего сайта.
Перед публикацией все комментарии проходят обязательную модерацию!
Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
И еще не пойму, Вы пишите на все страницы сайта, а поподробней.
Ведь есть шаблон сайта как быть с файлами, например, main.tpl, registration.tpl, и как основной файл сайта index.php.
Для этого после <?php добавьте:
$agent = $_SERVER['HTTP_USER_AGENT'];
if (strpos($agent, 'Googlebot')===false and strpos($agent, 'YandexBot')===false) {
И не забудьте в конце перед тегом ?> закрыть фигурную скобку "}".
По поводу закрыть скобку, теперь их две после exit;
<a href="../bad_bot/black_list.php">
<img src="../bad_bot/pixel.gif" alt="" width="1" height="1">
</a>.
Что делаю не так?
Сообщение об ошибке:
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.
Дальнейшее обсуждение данной проблемы перенес на наш форум.
Ты ведь сам себя в роботы записал, открыв этот файл :D
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. Или они полезли в запрещенную папку по ссылке гифки или их скрипт заблокировал так же, как и меня, по ошибке.
Доверия скрипту теперь нет.
Спасибо. Всё работает. Но, если я заходил на страницу ловушку, то потом даже удалив IP из файла dat, то система потом не пускает на страницу (пишет ошибка страницы) даже после перезагрузки браузера. Пока не удалю со страницы инлюде для проверки при загрузке, на страницу не зайти. Такое ощущение, что IP сохраняется где-то ещё, но ведь на самом деле такого нет. Что делать?
Спасибо. С уважением.