Ловушка для спам-бота

Многие спам-боты, чтобы скрыть свои реальные имена (названия), которые легко отследить по записи user_agent, изменяют эту запись, меняя её на записи разных браузеров (например: "mozilla/4.0 (compatible; msie 5.5; windows nt 5.0)" и так далее). Также эти боты игнорируют стандарты записей для файла robots.txt (описание стандарта Вы можете прочесть здесь http://www.robotstxt.org/wc/exclusion.html robots.txt standard).

Можно, конечно, пойти путём записи нужных инструкций в файл robots.txt, а можно и предпринять другой способ, который мы опишем ниже.

Метод №1

Используем специальную директорию /bot-trap:
1. создайте поддиректорию /bot-trap (можете использовать любое другое имя)
2. сделайте такую запись в файле robots.txt:

user-agent: *
disallow: /bot-trap/

3. вставьте невидимую ссылку (это пиксел размера 1х1) в самом начале входной страницы сайта:



Теперь можно ждать и просматривать лог сервера, чтобы посмотреть кто перешёл по этой ссылке.
Человек не увидит этой ссылки, поэтому не сможет по ней перейти, а поисковые системы управляются директивами, записанными в фале robots.txt , поэтому никогда не посетят директорию /bot-trap.

4. В созданную нами директорию мы поместим /bot-trap/index.php. С помощью этого скрипта мы будем автоматически сохранять все ip адреса в файл blacklist.dat.
Для начала создайте пустой файл ../blacklist.dat и сделайте его доступным для чтения и записи на сервере.

* В тексте скрипта измените некоторые значения

<?php
if(phpversion() >= "4.2.0") {
extract($_server);
}
?>
<html>
<head><title> </title></head>
<body>
<p>Здесь нечего смотреть. Так что же Вы здесь делаете?</p>
<p><a href="http://your.domain.ru/">вернуться назад</a></p>
<?php
$badbot
= 0;
/* перебираем все записи файла blacklist.dat, чтобы не допустить задвоенности данных */
$filename = "../blacklist.dat";
$fp = fopen($filename, "r") or die ("Ошибка открытия файла ... <br>n");
while (
$line = fgets($fp,255)) {
$u = explode(" ",$line);
if (
ereg($u[0],$remote_addr)) {$badbot++;}
}
fclose($fp);
if (
$badbot == 0) {
/* отсылаем информацию веб-мастеру */
$tmestamp = time();
$datum = date("y-m-d (d) h:i:s",$tmestamp);
$from = "badbot-watch@domain.ru";
$to = "hostmaster@domain.ru";
$subject = "Внимание! На сайт заходил спам-бот!";
$msg = "Бот пришёл с $request_uri $datum n";
$msg .= "адрес $remote_addr, агент $http_user_agentn";
mail($to, $subject, $msg, "from: $from");
/* добавляем запись в лог-файл blacklist.dat */
$fp = fopen($filename,'a+');
fwrite($fp,"$remote_addr - - [$datum] "$request_method $request_uri $server_protocol" $http_referer $http_user_agentn");
fclose($fp);
}
?>
</body>
</html>

5. Чтобы исключить повторный заход спам-бота на страницвы сайта, перед выводом любой страница сайта нужно проверять содержимое файла blacklist.dat:

<?php include($_server['document_root'] . "/blacklist.php"); ?>

Это текст скрипта blacklist.php , который нужно подключать ко всем страницам Вашего сайта:

<?php
if(phpversion() >= "4.2.0") {
extract($_server);
}
$badbot = 0;
/* перебираем все записи файла blacklist.dat */
$filename = "../blacklist.dat";
$fp = fopen($filename, "r") or die ("Ошибка открытия файла ... <br>n");
while (
$line = fgets($fp,255)) {
$u = explode(" ",$line);
if (
ereg($u[0],$remote_addr)) {$badbot++;}
}
fclose($fp);
if (
$badbot > 0) { /* это спам-бот, запрещаем вход на сайт */
sleep(12);
print (
"<html><head>n");
print (
"<title>Сайт недоступен.</title>n");
print (
"</head><body>n");
print (
"<center><h1>Добро пожаловать!</h1></center>n");
print (
"<p><center>Этот сайт временно недоступен ...</center></p>n");
print (
"<p><center>Если Вы считаете, что это ошибка, отправьте письмо владельцу сайта.</center></p>n");
print (
"</body></html>n");
exit;
}
?>

Метод №2

Другой метод не использует php и также запрещает доступ спам-ботов к Вашему сайту. Он заключается в использовании файла .htaccess.

Пример записи:

setenvifnocase user-agent "indy library" bad_bot
setenvifnocase user-agent "internet explore 5.x" bad_bot
setenvif remote_addr "195.154.174.[0-9]+" bad_bot
setenvif remote_addr "211.101.[45].[0-9]+" bad_bot
order allow,deny
allow from all
deny from env=bad_bot

Надеемся, что это поможет Вам избавиться (хотя бы частично) от воровства адресов электронной почты со страниц Вашего сайта.

Автор: нет данных