БОТ / Идеи ловушек пауков - PullRequest
       23

БОТ / Идеи ловушек пауков

5 голосов
/ 30 сентября 2010

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

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

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

РЕДАКТИРОВАТЬ: У меня уже есть много идей для того, чтобы поймать один .. это то, что с ним делать, когда попадает в ловушку.

Ответы [ 5 ]

6 голосов
/ 30 сентября 2010

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

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

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

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

1 голос
/ 30 сентября 2010

Ну, должен сказать, немного разочарован - я надеялся на некоторые творческие идеи.Я нашел здесь идеальные решения .. 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("Y-m-d (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>

Затем для защиты страниц бросьте <?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;
    }
?>

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

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

1 голос
/ 30 сентября 2010

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

Существует несколько вопросов и дискуссий по этому поводу по вине сервера, которые могут быть достойны изучения.

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

1 голос
/ 30 сентября 2010

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

0 голосов
/ 30 сентября 2010

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

...