2010-09-29 19 views
5

Mam klienta, którego domena wydaje się być bardzo mocno uderzona przez to, co wydaje się być DDoS. W dziennikach jest to normalnie wyglądający agent użytkownika z losowymi adresami IP, ale przeglądają strony zbyt szybko, aby być ludźmi. Wygląda na to, że nie żądają żadnych obrazów. Nie mogę znaleźć żadnego wzorca i podejrzewam, że jest to flota Windows Zombies.Pomysły BOT/Pająka Pułapka

W przeszłości klienci mieli problemy z atakami SPAM - nawet musieli wskazywać MX w Postini, aby uzyskać 6,7 GB/dzień śmieci, aby zatrzymać serwer po stronie serwera.

Chcę ustawić pułapkę BOT w katalogu niedozwolonym przez robots.txt ... po prostu nigdy nie próbowałem czegoś podobnego wcześniej, mając nadzieję, że ktoś tam ma pomysłowe pomysły na wychwytywanie botów!

EDYTOWANIE: Mam już mnóstwo pomysłów na złapanie jednego ... to co zrobić, gdy ląduje w pułapce.

+3

Jest to fascynujące pytanie, chciałbym zobaczyć niektóre odpowiedzi. Ale podejrzewam, że może lepiej pasować do [Awaria serwera] (http://serverfault.com). –

+1

Zgadzam się, ale programiści są o wiele bardziej kreatywni niż informatycy..lol! – Mikey1980

+1

Ale ktoś "stworzył" to rozwiązanie już, a informatycy są bardzo dobrzy w jego wdrażaniu. –

Odpowiedz

0

Możesz najpierw sprawdzić, skąd pochodzą adresy IP. Domyślam się, że wszystkie pochodzą z jednego kraju, takiego jak Chiny czy Nigeria, w którym to przypadku możesz ustawić coś w htaccess, aby uniemożliwić wszystkie IP z tych dwóch krajów, jak na stworzenie pułapki dla botów, nie miałem najmniejszego pojęcia

+0

IP są wszędzie .. co w przypadku SPAM było dość oczywiste, że początki były zainfekowanymi maszynami Windows. – Mikey1980

6

Można ustawić skrypt PHP, którego adres URL jest jawnie zabroniony przez plik robots.txt. W tym skrypcie możesz pobrać źródłowy adres IP podejrzanego bota, który Cię uderza (przez $ _SERVER ['REMOTE_ADDR']), a następnie dodać ten adres IP do czarnej listy bazy danych.

Następnie w głównej aplikacji możesz sprawdzić źródłowy adres IP, wyszukać adres IP w swojej czarnej liście, a jeśli go znajdziesz, zamiast tego wyślij stronę 403. (Być może z komunikatem typu: "Wykryliśmy nadużycie pochodzące z Twojego adresu IP, jeśli uważasz, że to pomyłka, skontaktuj się z nami pod adresem ...")

Z drugiej strony, otrzymujesz automatyczną czarną listę złych botów. Z drugiej strony nie jest to bardzo wydajne i może być niebezpieczne. (Jedna osoba niewinnie sprawdzająca tę stronę z ciekawości może skutkować zakazem dużego zbioru użytkowników.)

Edycja: Alternatywnie (lub dodatkowo, jak przypuszczam) można dość łatwo dodać do swojej aplikacji sprawdzian z zakresu GeoIP, a także odrzucaj trafienia w oparciu o kraj pochodzenia.

+6

Możesz mieć coś w rodzaju captcha, aby zautomatyzować niepobożną listę dla prawdziwych ludzi, którzy ją klikają. –

+0

Ooh tak, dobry pomysł. –

+0

masz najlepszą odpowiedź ... zaimplementowałeś te rozwiązania sorta (nie zapisałeś w db), połączyłeś je z sugestią Scotta i małym robotem torującym. Zobacz moją odpowiedź, aby uzyskać więcej informacji: – Mikey1980

1

Co możesz zrobić, to dostać inne pudełko (rodzaj baranka ofiarnego) nie na tej samej rurze, co twój główny host, a następnie mieć hosta stronę, która przekierowuje do siebie (ale z losową nazwą strony w url). może to spowodować, że bot utknie w nieskończonej pętli, przywiązując cpu i pasmo do swojej ofiarnej owieczki, ale nie do głównej skrzynki.

1

Mam tendencję do myślenia, że ​​jest to problem lepiej rozwiązany z bezpieczeństwem sieciowym bardziej niż kodowanie, ale widzę logikę w twoim podejściu/pytaniu.

Istnieje wiele pytań i dyskusji na ten temat na temat awarii serwera, które mogą być warte zbadania.

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

1

No muszę powiedzieć, trochę rozczarowany - Miałem nadzieję, że dla niektórych pomysłów twórczych. Zrobiłem znaleźć optymalne rozwiązania tutaj .. 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 = "[email protected]"; 
     $to = "[email protected]"; 
     $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> 

Następnie do ochrony stron rzucać <?php include($DOCUMENT_ROOT . "/blacklist.php"); ?> w pierwszym wierszu każdej strony ..blacklist.php zawiera:

<?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; 
    } 
?> 

Planuję wziąć porady Scott Chamberlaina i pewności planuję wdrożyć Captcha nad scenariuszem. Jeśli użytkownik odpowie poprawnie, to po prostu die lub przekieruje z powrotem do głównej witryny. Dla zabawy wrzucam pułapkę do katalogu o nazwie /admin/ i dodam do pliku robots.txt Disallow: /admin/.

EDIT: Ponadto mam przekierowanie bot ignorując zasady do tej strony: http://www.seastory.us/bot_this.htm

+2

co za głupie podejście. zabije twoją stronę szybciej niż jakikolwiek atak ddos ​​(choć wątpię, że już ją widziałeś). –

Powiązane problemy