100 % работающий скрипт! Многие спам-боты, чтобы скрыть свои реальные имена (названия), которые легко отследить по записи user_agent, изменяют эту запись, меняя её на записи разных браузеров (например: "mozilla/4.0 (compatible; msie 5.5; windows nt 5.0)" и так далее). Также эти боты игнорируют стандарты записей для файла robots.txt (описание стандарта Вы можете прочесть здесь 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) в самом начале входной страницы сайта: <a href="/bot-trap/"><img src="images/pixel.gif" border="0" alt=" " width="1" height="1"></a> Теперь можно ждать и просматривать лог сервера, чтобы посмотреть кто перешёл по этой ссылке. Человек не увидит этой ссылки, поэтому не сможет по ней перейти, а поисковые системы управляются директивами, записанными в фале 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 Надеемся, что это поможет Вам избавиться (хотя бы частично) от воровства адресов электронной почты со страниц Вашего сайта.
|