Многие спам-боты, чтобы скрыть свои реальные имена (названия), которые легко отследить по записи 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: