it-swarm.com.de

Erkennung von "heimlichen" Web-Crawlern

Welche Optionen gibt es, um Web-Crawler zu erkennen, die nicht erkannt werden möchten?

(Ich weiß, dass das Auflisten von Erkennungstechniken es dem intelligenten Stealth-Crawler-Programmierer ermöglicht, eine bessere Spinne zu erstellen, aber ich glaube nicht, dass wir jemals intelligente Verstohlenheits-Crawler blockieren können, nur diejenigen, die Fehler machen.)

Ich spreche nicht von den Nice-Crawlern wie Googlebot und Yahoo! Slurp ... Ich halte einen Bot für nett, wenn es:

  1. identifiziert sich als Bot in der Benutzeragentenzeichenfolge
  2. liest robots.txt (und gehorcht es)

Ich spreche von den bad - Crawlern, die sich hinter gewöhnlichen Benutzeragenten verstecken, meine Bandbreite nutzen und mir nie etwas zurückgeben.

Es gibt einige Falltüren, die erstellt werden können aktualisierte Liste (danke Chris, gs):

  1. Hinzufügen eines Verzeichnisses, das nur in der Datei robots.txt aufgeführt ist (als nicht zulässig gekennzeichnet),
  2. Hinzufügen unsichtbarer Links (möglicherweise markiert als rel = "nofollow"?),
    • style = "display: none;" auf Link oder übergeordneten Container
    • unter einem anderen Element mit höherem Z-Index platziert
  3. erkennen, wer Kapitalisierung nicht versteht,
  4. ermitteln Sie, wer versucht, Antworten zu posten, schlagen Sie jedoch immer das Captcha fehl.
  5. erkennen von GET-Anforderungen an reine POST-Ressourcen
  6. erkennen Sie das Intervall zwischen den Anforderungen
  7. reihenfolge der angeforderten Seiten ermitteln
  8. ermitteln, wer (konsistent) https-Ressourcen über http anfordert
  9. erkennen, wer keine Bilddatei anfordert (dies in Kombination mit einer Liste von Benutzeragenten bekannter bildfähiger Browser funktioniert überraschend gut)

Einige Fallen würden durch "gute" und "schlechte" Bots ausgelöst. Sie könnten diese mit einer Whitelist kombinieren:

  1. Es löst eine Falle aus
  2. Es fordert robots.txt
  3. Es löst keine weitere Falle aus, weil es robots.txt gehorcht

Eine andere wichtige Sache hier ist:
Bitte berücksichtigen Sie blinde Menschen, die einen Screenreader verwenden: Geben Sie den Leuten die Möglichkeit, mit Ihnen Kontakt aufzunehmen, oder lösen Sie ein Captcha (kein Bild), um mit dem Browsen fortzufahren.

Welche Methoden gibt es, um die Web-Crawler, die versuchen, sich als normale menschliche Besucher zu maskieren, automatisch zu erkennen.

Update
Die Frage ist nicht: Wie fange ich jeden Crawler? Die Frage ist: Wie kann ich die Chance, einen Crawler zu finden, maximieren? 

Einige Spinnen sind wirklich gut und analysieren und verstehen tatsächlich HTML, Xhtml, CSS Javascript, VB Skript etc ...
Ich mache mir keine Illusionen: Ich kann sie nicht schlagen.

Sie wären jedoch überrascht, wie dumm manche Crawler sind. Mit dem besten Beispiel für Dummheit (meiner Meinung nach): Umsetzen Sie alle URLs in Kleinbuchstaben, bevor Sie sie anfordern.

Und dann gibt es eine Menge Crawler, die einfach nicht gut genug sind, um die verschiedenen Falltüren zu umgehen.

106
Jacco

Vor einiger Zeit arbeitete ich mit einem kleinen Hosting-Unternehmen zusammen, um ihnen bei der Implementierung einer Lösung zu helfen. Das von mir entwickelte System untersuchte Webserver-Protokolle auf übermäßige Aktivitäten von einer beliebigen IP-Adresse und stellte Firewall-Regeln zum Blockieren von Tätern aus. Es enthielt Whitelists von IP-Adressen Bereichen basierend auf/- http://www.iplists.com/ , die dann bei Bedarf automatisch aktualisiert wurden, indem die beanspruchten User-Agent-Zeichenfolgen überprüft wurden und ob der Client behauptete, eine legitime Spinne zu sein Aber nicht auf der Whitelist. Es wurden DNS/Reverse-DNS-Lookups durchgeführt, um zu überprüfen, ob die Quell-IP-Adresse dem beanspruchten Besitzer des Bots entspricht. Aus Sicherheitsgründen wurden diese Aktionen per E-Mail an den Administrator gemeldet. Außerdem wurden Links zu einer schwarzen/weißen Liste der Adresse für den Fall einer fehlerhaften Bewertung angezeigt.

Ich habe seit ungefähr sechs Monaten nicht mit diesem Kunden gesprochen, aber als ich zuletzt gehört habe, funktionierte das System ziemlich gut.

Nebenaspekt: ​​Wenn Sie über ein ähnliches Erkennungssystem nachdenken, das auf der Begrenzung der Trefferquote basiert, sollten Sie unbedingt mindestens eine Minute (und vorzugsweise mindestens fünf Minuten) verwenden. Ich sehe viele Leute, die über diese Art von Schemata sprechen, die jeden blockieren wollen, der 5-10 Treffer in einer Sekunde erreicht. Dies kann auf bildlastigen Seiten zu Fehlalarmen führen (es sei denn, Bilder werden von der Zählung ausgeschlossen) und will erzeugt falsch positive Ergebnisse, wenn jemand wie ich eine interessante Seite findet, von der er alles lesen möchte. Er öffnet also alle Links in Registerkarten, die im Hintergrund geladen werden, während er die erste liest.

15
Dave Sherohman

Siehe Project Honeypot - sie richten in großem Umfang Bot-Traps ein (und haben DNSRBL mit ihren IPs).

Benutze knifflige URLs und HTML:

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

In HTML können Sie viele Tricks mit Kommentaren, CDATA-Elementen, Entitäten usw. verwenden:

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->
14
Kornel

Eine einfache Lösung besteht darin, einen Link zu erstellen und ihn unsichtbar zu machen

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

Natürlich sollten Sie davon ausgehen, dass einige Leute, die den Quellcode betrachten, diesem Link folgen, um zu sehen, wohin er führt. Aber Sie könnten diesen Benutzern ein Captcha präsentieren ...

Gültige Crawler würden natürlich auch dem Link folgen. Sie sollten jedoch kein rel = nofollow implementieren, sondern nach dem Zeichen eines gültigen Crawlers suchen. (wie der Benutzeragent)

9
Georg Schölly

Eine Sache, die Sie nicht aufgelistet haben, die häufig zur Erkennung fehlerhafter Crawler verwendet wird.

Wenn Sie Geschwindigkeit erreichen, brechen gute Webcrawler ihre Treffer auf, sodass sie keine Website mit Anfragen überschwemmen. Schlechte tun eines von drei Dingen:

  1. schlagen Sie aufeinanderfolgende Links an
  2. triff sequentielle Links in einer Paralell-Sequenz (2 oder mehr gleichzeitig).
  3. folgen Sie sequenziellen Links in einem festen Intervall

Außerdem wird bei einigen Offline-Browsern eine Reihe von Seiten verschluckt. Ich bin mir nicht sicher, welche Art von Schwellenwert Sie verwenden möchten, um die IP-Adresse zu blockieren.

Diese Methode fängt auch Spiegelprogramme wie fmirror oder wget ab.

Wenn der Bot das Zeitintervall zufällig verteilt, können Sie prüfen, ob die Links sequentiell oder in der Tiefe zuerst durchlaufen werden, oder Sie können feststellen, ob der Bot eine große Menge an Text durchläuft (wie in zu lesenden Wörtern) zu kurze Zeit. Einige Standorte begrenzen auch die Anzahl der Anfragen pro Stunde.

Eigentlich habe ich irgendwo eine Idee gehört, ich weiß nicht, wo, wenn ein Benutzer in Kilobyte zu viele Daten erhält, kann ihm ein Captcha angezeigt werden, in dem er gefragt wird, ob er kein Bot ist. Ich habe das noch nie gesehen.

Soweit es um das Ausblenden von Links geht, können Sie ein div unter ein anderes setzen, wobei CSS (in der Draw-Reihenfolge zuerst) und möglicherweise die Z-Reihenfolge festgelegt wird. Ein Bot könnte das nicht ignorieren, ohne dass er alle Javascript analysiert, um zu sehen, ob es sich um ein Menü handelt. Bis zu einem gewissen Grad können auch Links in unsichtbaren DIV-Elementen nicht ignoriert werden, ohne dass der Bot das gesamte JavaScript analysiert.

Wenn man diese Idee zum Abschluß bringt, könnte ein nicht aufgerufenes Javascript, das möglicherweise die verborgenen Elemente zeigen könnte, eine Untermenge von Javascript-Parsing-Bots täuschen. Und es ist nicht viel Arbeit zu implementieren.

6
Chris

Eine einfache Methode zur Bot-Erkennung, die ich für Formulare gehört habe, ist die verborgene Eingabemethode. Wenn Sie versuchen, ein Formular zu sichern, geben Sie eine Eingabe in das Formular mit einer ID ein, die absolut legitim aussieht. Verwenden Sie dann css in einer externen Datei, um sie auszublenden. Wenn Sie wirklich paranoid sind, richten Sie etwas wie jquery ein, um das Eingabefeld beim Laden der Seite auszublenden. Wenn Sie dies richtig machen, kann ich mir vorstellen, dass es für einen Bot sehr schwer sein wird, dies herauszufinden. Sie wissen, dass diese Bots die Natur haben, alles auf einer Seite auszufüllen, insbesondere wenn Sie Ihrer verborgenen Eingabe eine ID wie id = "fname" usw. geben.

4
Agile Noob

Nicht getestet, aber hier ist eine nette Liste von Benutzeragenten, aus denen Sie einen regulären Ausdruck machen könnten. Könnte Sie den größten Weg dorthin bringen:

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|[email protected]\.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|[email protected]|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|[email protected]|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]

Aus: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/

3
Brian Armstrong

Es ist eigentlich nicht so einfach, mit den guten Zeichen des Benutzeragenten Schritt zu halten. Browserversionen kommen und gehen. Das Erstellen einer Statistik über Benutzeragenten-Zeichenfolgen anhand verschiedener Verhalten kann interessante Dinge aufdecken.

Ich weiß nicht, inwieweit dies automatisiert werden könnte, aber es ist zumindest eine Besonderheit.

2
iny

Sie können auch Empfehlungen überprüfen. Keine Überweisung konnte den Verdacht von Bot aufbringen. Schlechter Verweis bedeutet, dass es sich nicht um einen Browser handelt.

Hinzufügen von unsichtbaren Links (möglicherweise markiert als rel = "nofollow"?),

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

Das würde ich nicht tun. Sie können für Black Hat SEO auf der Blacklist landen :)

1
Danubian Sailor

Ich arbeite derzeit für ein Unternehmen, das Websites scannt, um sie zu klassifizieren. Wir überprüfen auch Websites auf Malware.

Meiner Erfahrung nach sind die größten Blocker unseres Web-Crawlers (die natürlich einen IE oder Firefox UA verwenden und nicht robots.txt. Duh. Gehorchen) Websites, die absichtlich Malware hosten. Es ist ein Schmerz, weil die Site dann auf einen Menschen zurückgreift, der die Site manuell laden, klassifizieren und auf Malware überprüfen muss.

Ich sage nur: indem Sie Web-Crawler blockieren, setzen Sie sich in schlechte Gesellschaft.

Wenn sie schrecklich unhöflich sind und Tonnen von Ihrer Bandbreite aufsaugen, ist das natürlich eine andere Geschichte, denn dann haben Sie einen guten Grund.

0
Zan Lynx

Die Leute wenden sich an breite Crawler, nicht an Crawler, die auf Ihre Website spezialisiert sind.

Ich schreibe Stealth-Crawler, und wenn sie einzeln gebaut werden, hat keine Menge an Honigtöpfen oder verborgenen Verbindungen irgendeinen Effekt. Die einzige Möglichkeit, spezielle Crawler zu erkennen, besteht in der Untersuchung der Verbindungsmuster. 

Die besten Systeme verwenden AI (z. B. Linkedin), um dies zu adressieren.
Die einfachste Lösung ist das Schreiben von Protokoll-Parsern, die IP-Verbindungen analysieren und diese IP-Adressen einfach auf eine schwarze Liste setzen oder Captcha bereitstellen, zumindest vorübergehend. 

z.B.
Wenn IP X alle 2 Sekunden eine Verbindung zu foo.com/cars/*.html aber zu keiner anderen Seite herstellt, ist dies höchstwahrscheinlich ein Bot oder ein hungriger Power User.

Alternativ gibt es verschiedene Javascript-Herausforderungen, die als Schutz dienen (z. B. das Anti-Bot-System von Cloudflare). Diese sind jedoch leicht lösbar. Sie können etwas schreiben und können so abschreckend sein, dass es für den Crawler nicht die Mühe wert ist.

Sie müssen jedoch eine Frage stellen, wenn Sie bereit sind, legitime Benutzer falsch positiv zu bewerten und Unannehmlichkeiten mit sich bringen, um den Bot-Verkehr zu verhindern. Der Schutz öffentlicher Daten ist ein unmögliches Paradoxon.

0
Granitosaurus