Идеи BOT / Spider Trap

У меня есть клиент, чей домен, похоже, сильно ударит по тому, что кажется DDoS. В журналах это обычные пользовательские агенты со случайными IP-адресами, но они слишком быстро перелистывают страницы, чтобы быть людьми. Они также, похоже, не запрашивают никаких изображений. Кажется, я не вижу никакой картины, и мое подозрение – это парк Windows Zombies.

У клиентов были проблемы в прошлом с SPAM-атаками – даже пришлось указывать MX в Postini, чтобы получить 6,7 ГБ / день нежелательной почты, чтобы остановить сервер.

Я хочу настроить ловушку BOT в каталоге, запрещенном robots.txt … просто никогда не пытался ничего подобного раньше, надеясь, что у кого-то есть творческие идеи для ловушки BOTs!

EDIT: У меня уже есть много идей, чтобы поймать одного. Это то, что нужно делать, когда попадает в ловушку.

Вы можете настроить скрипт PHP, чей URL явно запрещен robots.txt. В этом скрипте вы можете вытащить IP-адрес подозреваемого бота, попавшего вам (через $ _SERVER ['REMOTE_ADDR']), а затем добавить этот IP-адрес в таблицу черного списка базы данных.

Затем в главном приложении вы можете проверить исходный IP-адрес, выполнить поиск этого IP-адреса в своей таблице черного списка, а если вы его найдете, бросьте страницу 403 вместо этого. (Возможно, с таким сообщением, как «Мы ​​обнаружили злоупотребление, исходящее из вашего IP-адреса, если вы считаете, что это ошибка, свяжитесь с нами по …»)

С другой стороны, вы получаете автоматический черный список плохих ботов. С другой стороны, это не очень эффективно, и это может быть опасно. (Один человек, невинно проверяющий эту страницу из любопытства, может привести к запрету большого количества пользователей).

Изменить: В качестве альтернативы (или, более того, я полагаю) вы можете просто добавить GeoIP- проверку в свое приложение и отклонить обращения в зависимости от страны происхождения.

То, что вы можете сделать, это получить еще одну коробку (своего рода жертвенный ягненок), не на той же самой трубке, что и ваш главный хост, после чего у нее есть страница, которая перенаправляет на себя (но с рандомизированным именем страницы в URL-адресе). это может привести к тому, что бот застрял в бесконечном цикле, привязывая процессор и привязывающий вас к жертвенному ягненку, но не к вашей основной коробке.

Я склонен думать, что проблема лучше решена с сетевой безопасностью, а не кодированием, но я вижу логику в вашем подходе / вопросе.

Есть ряд вопросов и дискуссий об этом по ошибке сервера, которая может быть достойна расследования.

https://serverfault.com/search?q=block+bots

Ну, я должен сказать, что я разочарован – я надеялся на какие-то творческие идеи. Я нашел здесь идеальные решения. http://www.kloth.net/internet/bottrap.php

 <html> <head><title> </title></head> <body> <p>There is nothing here to see. So what are you doing here ?</p> <p><a href="http://your.domain.tld/">Go home.</a></p> <?php /* whitelist: end processing end exit */ if (preg_match("/10\.22\.33\.44/",$_SERVER['REMOTE_ADDR'])) { exit; } if (preg_match("Super Tool",$_SERVER['HTTP_USER_AGENT'])) { exit; } /* end of whitelist */ $badbot = 0; /* scan the blacklist.dat file for addresses of SPAM robots to prevent filling it up with duplicates */ $filename = "../blacklist.dat"; $fp = fopen($filename, "r") or die ("Error opening file ... <br>\n"); while ($line = fgets($fp,255)) { $u = explode(" ",$line); $u0 = $u[0]; if (preg_match("/$u0/",$_SERVER['REMOTE_ADDR'])) {$badbot++;} } fclose($fp); if ($badbot == 0) { /* we just see a new bad bot not yet listed ! */ /* send a mail to hostmaster */ $tmestamp = time(); $datum = date("Ymd (D) H:i:s",$tmestamp); $from = "badbot-watch@domain.tld"; $to = "hostmaster@domain.tld"; $subject = "domain-tld alert: bad robot"; $msg = "A bad robot hit $_SERVER['REQUEST_URI'] $datum \n"; $msg .= "address is $_SERVER['REMOTE_ADDR'], agent is $_SERVER['HTTP_USER_AGENT']\n"; mail($to, $subject, $msg, "From: $from"); /* append bad bot address data to blacklist log file: */ $fp = fopen($filename,'a+'); fwrite($fp,"$_SERVER['REMOTE_ADDR'] - - [$datum] \"$_SERVER['REQUEST_METHOD'] $_SERVER['REQUEST_URI'] $_SERVER['SERVER_PROTOCOL']\" $_SERVER['HTTP_REFERER'] $_SERVER['HTTP_USER_AGENT']\n"); fclose($fp); } ?> </body> </html> 

Затем для защиты страниц throw <?php include($DOCUMENT_ROOT . "/blacklist.php"); ?> <?php include($DOCUMENT_ROOT . "/blacklist.php"); ?> в первой строке каждой страницы. blacklist.php содержит:

 <?php $badbot = 0; /* look for the IP address in the blacklist file */ $filename = "../blacklist.dat"; $fp = fopen($filename, "r") or die ("Error opening file ... <br>\n"); while ($line = fgets($fp,255)) { $u = explode(" ",$line); $u0 = $u[0]; if (preg_match("/$u0/",$_SERVER['REMOTE_ADDR'])) {$badbot++;} } fclose($fp); if ($badbot > 0) { /* this is a bad bot, reject it */ sleep(12); print ("<html><head>\n"); print ("<title>Site unavailable, sorry</title>\n"); print ("</head><body>\n"); print ("<center><h1>Welcome ...</h1></center>\n"); print ("<p><center>Unfortunately, due to abuse, this site is temporarily not available ...</center></p>\n"); print ("<p><center>If you feel this in error, send a mail to the hostmaster at this site,<br> if you are an anti-social ill-behaving SPAM-bot, then just go away.</center></p>\n"); print ("</body></html>\n"); exit; } ?> 

Я планирую взять совет Скотта Чемберлена и быть в безопасности, я планирую реализовать Captcha в сценарии. Если пользователь правильно ответит, он просто die или перенаправит обратно на сайт root. Просто для удовольствия я бросаю ловушку в директорию с именем /admin/ и из курсовых добавляет Disallow: /admin/ в robots.txt.

EDIT: Кроме того, я перенаправляю бота, игнорируя правила на эту страницу: http://www.seastory.us/bot_this.htm

Вы можете сначала взглянуть на то, откуда идут ip. Я предполагаю, что все они происходят из одной страны, как Китай или Нигерия, и в этом случае вы могли бы настроить что-то в htaccess, чтобы запретить все ip из этих двух стран, так как для создания ловушки для ботов, у меня нет малейшей идеи