Wykrywanie „ukrytych” robotów internetowych

107

Jakie są opcje wykrywania robotów internetowych, które nie chcą być wykrywane?

(Wiem, że techniki wykrywania aukcji pozwolą inteligentnemu programistowi stealth-crawlerów na stworzenie lepszego pająka, ale nie sądzę, żebyśmy kiedykolwiek byli w stanie zablokować inteligentne roboty, a tylko te, które popełniają błędy.)

Nie mówię o fajnych robotach, takich jak Googlebot i Yahoo! Slurp. Uważam bota za fajnego, jeśli:

  1. identyfikuje się jako bot w ciągu agenta użytkownika
  2. czyta plik robots.txt (i przestrzega go)

Mówię o złych robotach, chowających się za zwykłymi użytkownikami, wykorzystujących moją przepustowość i nigdy nie dając mi nic w zamian.

Istnieje kilka zapadni, które można zbudować zaktualizowaną listę (dzięki Chris, gs) :

  1. Dodanie katalogu tylko wymienionego (oznaczonego jako disallow) w pliku robots.txt,
  2. Dodanie niewidocznych linków (prawdopodobnie oznaczonych jako rel = "nofollow"?),
    • style = "display: none;" na linku lub w kontenerze nadrzędnym
    • umieszczony pod innym elementem o wyższym indeksie Z.
  3. wykryć, kto nie rozumie kapitalizacji,
  4. wykryć, kto próbuje wysyłać odpowiedzi, ale zawsze nie powiedzie się Captcha.
  5. wykrywa żądania GET do zasobów tylko POST
  6. wykryć odstęp między żądaniami
  7. wykryć kolejność żądanych stron
  8. wykryć, kto (konsekwentnie) żąda zasobów https przez http
  9. Wykryj, kto nie żąda pliku obrazu (w połączeniu z listą klientów użytkownika znanych przeglądarek obsługujących obrazy działa zaskakująco dobrze)

Niektóre pułapki byłyby uruchamiane zarówno przez „dobre”, jak i „złe” boty. możesz połączyć je z białą listą:

  1. To uruchamia pułapkę
  2. To żądanie robots.txt?
  3. Nie uruchamia kolejnej pułapki, ponieważ był posłuszny robots.txt

Jest jeszcze jedna ważna rzecz:
rozważ osoby niewidome korzystające z czytników ekranu: daj innym możliwość skontaktowania się z Tobą lub rozwiąż Captcha (bez obrazu), aby kontynuować przeglądanie.

Jakie istnieją metody automatycznego wykrywania robotów indeksujących, które próbują maskować się jako zwykli ludzie.

Aktualizacja
Pytanie nie brzmi: jak złapać każdego robota. Pytanie brzmi: jak zmaksymalizować szansę wykrycia robota.

Niektóre pająki są naprawdę dobre i właściwie analizują i rozumieją html, xhtml, css javascript, skrypt VB itp ...
Nie mam złudzeń: nie będę w stanie ich pokonać.

Zdziwiłbyś się jednak, jak głupie są niektóre roboty. Najlepszym przykładem głupoty (moim zdaniem) jest: rzutowanie wszystkich adresów URL na małe litery przed ich zażądaniem.

Jest też cała masa robotów, które po prostu „nie są wystarczająco dobre”, aby ominąć różne zapadnie.

Jacco
źródło

Odpowiedzi:

15

Jakiś czas temu współpracowałem z niewielką firmą hostingową, aby pomóc im wdrożyć rozwiązanie tego problemu. Opracowany przeze mnie system sprawdzał logi serwera WWW pod kątem nadmiernej aktywności z dowolnego adresu IP i wydał reguły zapory sieciowej, aby blokować przestępców. Zawierał białe listy adresów / zakresów IP oparte na http://www.iplists.com/ , które były następnie aktualizowane automatycznie w razie potrzeby poprzez sprawdzanie żądanych ciągów klienta użytkownika i, jeśli klient twierdził, że jest legalnym pająkiem, ale nie na whitelist, przeprowadził wyszukiwania DNS / odwrotne DNS, aby sprawdzić, czy źródłowy adres IP odpowiada żądanemu właścicielowi bota. Ze względów bezpieczeństwa działania te zostały zgłoszone administratorowi pocztą e-mail, wraz z linkami do czarnej / białej listy adresu w przypadku nieprawidłowej oceny.

Nie rozmawiałem z tym klientem od około 6 miesięcy, ale ostatnio słyszałem, że system działał dość skutecznie.

Kwestia boczna: jeśli myślisz o zastosowaniu podobnego systemu wykrywania opartego na ograniczaniu liczby trafień, pamiętaj, aby użyć co najmniej jednej minuty (a najlepiej co najmniej pięciu minut). Widzę wiele osób mówi o tego rodzaju programów, które mają być blokowane, kto blaty 5-10 trafienia w sekundę, co może generować fałszywe pozytywy na stronach wizerunkowych ciężki (chyba, że obrazy są wyłączone z tally) i będzie generować fałszywe pozytywne, gdy ktoś taki jak ja znajdzie interesującą witrynę, którą chce przeczytać w całości, więc otwiera wszystkie linki w zakładkach, aby załadować je w tle, kiedy czyta pierwszą.

Dave Sherohman
źródło
5
Uważam, że fałszywy alarm spowodowany blokowaniem robota internetowego całkowicie zabija ruch internetowy. W zasadzie wkurzasz 99,8% swojego użytkownika, kierując się kiepską próbą utrudnienia robotom indeksującym, które mogą łatwo ominąć opisaną naiwną metodę. Nigdy nie jest dobrym pomysłem odmawianie użytkownikowi dostępu lub utrudnianie go, ponieważ niszczy to komfort korzystania z witryny.
KJW
14

Zobacz Project Honeypot - konfigurują pułapki na boty na dużą skalę (i mają DNSRBL ze swoimi adresami IP).

Używaj trudnych adresów URL i HTML:

<a href="https://example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

W HTML możesz użyć wielu sztuczek z komentarzami, elementami CDATA, encjami itp:

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->
Kornel
źródło
9

Łatwym rozwiązaniem jest utworzenie linku i uczynienie go niewidocznym

<a href="iamabot.script" style="display:none;">Don't click me!</a>

Oczywiście powinieneś spodziewać się, że niektórzy ludzie, którzy patrzą na kod źródłowy, podążają za tym linkiem tylko po to, aby zobaczyć, dokąd prowadzi. Ale możesz przedstawić tym użytkownikom captcha ...

Oczywiście prawidłowe roboty również skorzystałyby z tego linku. Nie należy jednak implementować atrybutu rel = nofollow, ale poszukać znaku prawidłowego robota. (jak klient użytkownika)

Georg Schölly
źródło
1
Chyba że bot sprawdzi atrybuty CSS odsyłacza i nie podąży za linkiem, ponieważ nie jest on widoczny dla użytkownika ...
Bob Somers
1
Oznakowanie linku „NIE klikaj mnie” byłoby lepszym pomysłem .. Jeśli ktoś ma wyłączony CSS (lub nie obsługuje CSS), link będzie widoczny ..
dbr
Dobry pomysł. Być może zmień tekst na „”. i styl CSS dopasowany do tła - dzięki czemu jest niewidoczny dla większości użytkowników? Lub uruchom skrypt, aby go ukryć po 1 sekundzie, pozostawiając go widocznym tylko dla bota, który nie może połączyć polecenia ukrywania javascript z linkiem?
Underverse
1
Uważaj na karę za czarny kapelusz z perspektywy SEO.
Alfred Wallace
6

Jedna rzecz, której nie wymieniłeś, a która jest powszechnie używana do wykrywania złych robotów.

Szybkość działania, dobre roboty sieciowe będą przerywać działania, aby nie zalewały witryny żądaniami. Złe zrobią jedną z trzech rzeczy:

  1. uderzaj w kolejne linki jeden po drugim
  2. trafiać w kolejne linki w jakiejś równoległej kolejności (2 lub więcej naraz).
  3. trafiać w kolejne linki w ustalonych odstępach czasu

Ponadto niektóre programy do przeglądania w trybie offline będą siorbać wiele stron, nie jestem pewien, jakiego rodzaju progu chcesz użyć, aby rozpocząć blokowanie według adresu IP.

Ta metoda będzie również przechwytywać programy lustrzane, takie jak fmirror czy wget.

Jeśli bot losuje przedział czasu, możesz sprawdzić, czy linki są przechodzone sekwencyjnie lub w pierwszej kolejności, lub możesz zobaczyć, czy bot przetwarza dużą ilość tekstu (jak w słowach do przeczytania) w zbyt krótki okres czasu. Niektóre witryny ograniczają również liczbę żądań na godzinę.

Właściwie to gdzieś usłyszałem pomysł, nie pamiętam gdzie, że jeśli użytkownik otrzyma za dużo danych w kilobajtach, może otrzymać captcha z prośbą o udowodnienie, że nie jest botem. Jednak nigdy nie widziałem tego zaimplementowanego.

Aktualizacja dotycząca ukrywania linków

Jeśli chodzi o ukrywanie linków, możesz umieścić element div pod innym za pomocą CSS (umieszczając go na pierwszym miejscu w kolejności rysowania) i ewentualnie ustawiając kolejność z. Bot nie mógł tego zignorować bez przeanalizowania całego kodu javascript, aby sprawdzić, czy jest to menu. Do pewnego stopnia linki wewnątrz niewidocznych elementów DIV również nie mogą być ignorowane bez analizowania przez bot całego kodu javascript.

Doprowadzając ten pomysł do końca, niewywołany javascript, który mógłby potencjalnie pokazać ukryte elementy, mógłby oszukać podzbiór botów analizujących javascript. I nie jest to dużo pracy do wykonania.

Chris
źródło
16
Poważna wada polegająca na „ignorowaniu JavaScript oznacza, że ​​jesteś botem”: Niektórzy z nas używają wtyczki NoScript. Żadna witryna nie uruchamia na mnie JavaScript, chyba że umieszczę witrynę na białej liście i jestem prawie pewien, że nie jestem botem.
Dave Sherohman
2
boty mogą teraz uruchamiać Javascript ... na litość boską jest rok 2013. więc cały argument. kto powiedział, że roboty sieciowe odwiedzają witryny w sekwencyjnych wyborach? kolejne ogromne założenie.
KJW
1
Javascript służył tylko do wyświetlania linku honeypot. Chodzi o to, że boty będą analizować java, które uczynią link honeypot widoczny, co czyni je bardziej prawdopodobne, aby śledzić link. Jednak dla prawdziwego użytkownika kod, który sprawia, że ​​link jest widoczny, nigdy nie zostałby wykonany. Tak więc użytkownicy NoScript, razem z każdym, kto nie wykonuje przypadkowych funkcji, byliby w porządku. To powiedziawszy, nie jestem pewien, dlaczego / jak bot miałby losowo wykonywać kod, a gdyby wykonywał statyczną analizę, aby określić, czy element może stać się widoczny, byłby to jeden fantazyjny bot.
Rick
4

Jedną z prostych metod wykrywania botów, o których słyszałem w przypadku formularzy, jest technika ukrytego wprowadzania danych. Jeśli próbujesz zabezpieczyć formularz, wprowadź dane wejściowe do formularza z identyfikatorem, który wygląda całkowicie legalnie. Następnie użyj css w zewnętrznym pliku, aby go ukryć. Lub jeśli jesteś naprawdę paranoikiem, skonfiguruj coś takiego jak jQuery, aby ukryć pole wprowadzania podczas ładowania strony. Jeśli zrobisz to dobrze, wyobrażam sobie, że robotowi byłoby bardzo trudno to rozgryźć. Wiesz, że te boty mają naturę wypełniania wszystkiego na stronie, zwłaszcza jeśli podasz swoje ukryte dane wejściowe identyfikator w stylu id = "fname" itp.

Agile Noob
źródło
2
nie, jeśli boty są w stanie czekać na zakończenie działania jquery, tak jak robi to zwykła przeglądarka. To działałoby dobrze na początku XXI wieku
KJW
3

Właściwie nie jest łatwo nadążyć za dobrymi ciągami znaków agenta użytkownika. Wersje przeglądarek przychodzą i odchodzą. Wykonywanie statystyk dotyczących łańcuchów agentów użytkownika za pomocą różnych zachowań może ujawnić interesujące rzeczy.

Nie wiem, jak dalece można to zautomatyzować, ale przynajmniej jest to jedna rzecz różnicująca.

iny
źródło
3

Nietestowane, ale tutaj jest ładna lista klientów użytkownika, z których można utworzyć wyrażenie regularne. Może cię tam dostać:

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:[email protected]|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|PackRat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

Zaczerpnięte z: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

Brian Armstrong
źródło
1

Możesz również sprawdzić skierowania. Żadne skierowanie nie mogło wzbudzić podejrzeń bota. Złe skierowanie oznacza, że ​​z pewnością nie jest to przeglądarka.

Dodanie niewidocznych linków (prawdopodobnie oznaczonych jako rel = "nofollow"?),

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

Nie zrobiłbym tego. Możesz skończyć na czarnej liście Google dla black hat SEO :)

Żeglarz Naddunajski
źródło
1
Co dokładnie i dlaczego miałoby to spowodować umieszczenie Cię na czarnej liście?
kontekst
1

Obecnie pracuję dla firmy, która skanuje strony internetowe w celu ich klasyfikacji. Sprawdzamy również witryny pod kątem złośliwego oprogramowania.

Z mojego doświadczenia wynika, że ​​najważniejszymi blokerami naszego robota sieciowego (który oczywiście korzysta z IE lub Firefox UA i nie przestrzega pliku robots.txt. Duh.) Są witryny celowo hostujące złośliwe oprogramowanie. Jest to uciążliwe, ponieważ witryna wraca następnie do człowieka, który musi ręcznie załadować witrynę, sklasyfikować ją i sprawdzić pod kątem złośliwego oprogramowania.

Mówię tylko, że blokując roboty sieciowe, stawiasz się w złym towarzystwie.

Oczywiście, jeśli są okropnie niegrzeczni i pochłaniają tony przepustowości, to inna historia, ponieważ masz dobry powód.

Zan Lynx
źródło
15
Przykro mi, ale jeśli korzystasz z robota, który nie przestrzega pliku robots.txt, nie przestrzegasz zasad. Nie przestrzegając zasad, sam stawiasz się w jakimś naprawdę złym towarzystwie. Sugerując, że egzekwowanie reguł określonych przez właściciela witryny (w pliku robots.txt) jest złą praktyką, niesłusznie odwracasz problem do góry nogami. Zasadniczo stwierdzasz, że nie rozumiesz, kto jest pełnoprawnym właścicielem treści.
Jacco
11
@Jacco: Gdyby robot szukający złośliwego oprogramowania przestrzegał zasad, nigdy by go nie znalazł. Porozmawiaj z autorami złośliwego oprogramowania.
Zan Lynx
5
@Jacco: Odsetek legalnych witryn, które próbują blokować niezgodne roboty? Poniżej 1%. Strony ze złośliwym oprogramowaniem, które próbują? Ponad 60%. Więc tak, to jest podejrzane.
Zan Lynx
4
@Jacco właściwie nie, nie ma właścicieli treści w sieci, jeśli są publiczne. Ktoś, kto robi to bez kopiowania i wklejania ręcznie, powinien otrzymać nagrodę, a nie karę. W internecie należy znieść całą tę koncepcję praw autorskich. Tylko kreatywne innowacje i zaufanie mogą budować wartość i zasługiwać na uwagę ludzi, a nie przez groźbę nieprzejrzystej zasłony prawnej.
KJW
Wszystko to wskazuje na to, że osoba prowadząca witrynę poświęciła dużo czasu i przemyślenia na stronę oraz że ma pewien stopień umiejętności technicznych. Więc to oczywiście wyklucza większość krzywej dzwonowej.
Parthian Shot
1

Ludzie zwracają się do szerokich robotów indeksujących, ale nie do robotów wyspecjalizowanych w Twojej witrynie.

Piszę „stealth crawlery” i jeśli są one budowane indywidualnie, żadna ilość pojemników z miodem lub ukrytych linków nie będzie miała żadnego wpływu - jedynym prawdziwym sposobem na wykrycie wyspecjalizowanych robotów jest sprawdzenie wzorców połączeń.

Najlepsze systemy wykorzystują AI (np. Linkedin), aby rozwiązać ten problem.
Najłatwiejszym rozwiązaniem jest zapisywanie parserów dziennika, które analizują połączenia IP i po prostu umieszczają je na czarnej liście lub obsługują captcha, przynajmniej tymczasowo.

np.
jeśli IP X pojawia się co 2 sekundy, łącząc się z foo.com/cars/*.htmlinnymi stronami, ale nie z żadnymi innymi stronami - najprawdopodobniej jest to bot lub głodny użytkownik zaawansowany.

Alternatywnie istnieją różne wyzwania javascript, które działają jako ochrona (np. System przeciwbotowy Cloudflare), ale są one łatwe do rozwiązania, możesz napisać coś niestandardowego i może to być wystarczająco odstraszające, aby nie było warte wysiłku dla robota.

Musisz jednak zadać pytanie, czy chcesz fałszywie pozytywnych użytkowników legalnych użytkowników i wprowadzić dla nich niedogodności, aby uniemożliwić ruch botów. Ochrona danych publicznych to niemożliwy paradoks.

Granitosaurus
źródło
-1

Krótka odpowiedź: jeśli programista średniego poziomu wie, co robi, nie będziesz w stanie wykryć robota bez wpływu na prawdziwego użytkownika. Mając swoje informacje publicznie, nie będziesz w stanie obronić ich przed robotem ... to jak pierwsza poprawka :)

Alex MAN
źródło