Ловушка для спам-бота 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_AGENT\n"; 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_AGENT\n"); 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 Надеемся, что это поможет Вам избавиться (хотя бы частично) от воровства адресов электронной почты со страниц Вашего сайта.
Источник: http://www.infonew.ru/bottrap.php |