Erkennen von "Stealth" -Webcrawlern

107

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

(Ich weiß, dass die Auflistung von Erkennungstechniken es dem intelligenten Stealth-Crawler-Programmierer ermöglichen wird, eine bessere Spinne zu entwickeln, aber ich glaube nicht, dass wir jemals in der Lage sein werden, intelligente Stealth-Crawler zu blockieren, nur diejenigen, die Fehler machen.)

Ich spreche nicht über die netten Crawler wie Googlebot und Yahoo! Schlürfen. Ich finde einen Bot schön, wenn es:

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

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

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

  1. Hinzufügen eines Verzeichnisses, das nur in der robots.txt aufgeführt (als nicht zulässig) aufgeführt ist,
  2. Hinzufügen unsichtbarer Links (möglicherweise als rel = "nofollow" markiert?),
    • style = "Anzeige: keine;" auf Link oder übergeordneten Container
    • unter einem anderen Element mit höherem Z-Index platziert
  3. erkennen, wer die Großschreibung nicht versteht,
  4. Erkennen Sie, wer versucht, Antworten zu veröffentlichen, aber das Captcha immer nicht besteht.
  5. Erkennen von GET-Anforderungen an reine POST-Ressourcen
  6. Intervall zwischen Anforderungen erkennen
  7. Reihenfolge der angeforderten Seiten erkennen
  8. Erkennen, 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 sowohl von "guten" als auch von "schlechten" Bots ausgelöst. Sie können diese mit einer Whitelist kombinieren:

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

Eine andere wichtige Sache hier ist:
Bitte erwägen Sie Blinde, die einen Bildschirmleser verwenden: Geben Sie den Menschen die Möglichkeit, mit Ihnen in Kontakt zu treten, oder lösen Sie ein (Nicht-Bild-) Captcha, um weiter zu surfen.

Welche Methoden gibt es, um die Webcrawler, 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 Wahrscheinlichkeit maximieren, einen Crawler zu erkennen?

Einige Spinnen sind wirklich gut und analysieren und verstehen tatsächlich HTML, XHTML, CSS-Javascript, VB-Skript usw.
Ich habe keine Illusionen: Ich werde sie nicht schlagen können.

Sie wären jedoch überrascht, wie dumm einige Crawler sind. Das beste Beispiel für Dummheit ist (meiner Meinung nach): Alle URLs in Kleinbuchstaben umwandeln, bevor sie angefordert werden.

Und dann gibt es eine ganze Reihe von Crawlern, die einfach nicht gut genug sind, um die verschiedenen Falltüren zu umgehen.

Jacco
quelle

Antworten:

15

Vor einiger Zeit habe ich mit einem kleinen Hosting-Unternehmen zusammengearbeitet, um ihnen bei der Implementierung einer Lösung zu helfen. Das von mir entwickelte System untersuchte Webserver-Protokolle auf übermäßige Aktivität von einer bestimmten IP-Adresse und gab Firewall-Regeln heraus, um Straftäter zu blockieren. Es enthielt Whitelists von IP-Adressen / Bereichen basierend auf http://www.iplists.com/ , die dann automatisch nach Bedarf aktualisiert wurden, indem beanspruchte User-Agent-Zeichenfolgen überprüft wurden und, falls der Client behauptete, eine legitime Spinne zu sein, aber nicht auf der In der Whitelist wurden DNS- / Reverse-DNS-Suchvorgänge durchgeführt, um zu überprüfen, ob die Quell-IP-Adresse dem beanspruchten Eigentümer des Bots entspricht. Aus Sicherheitsgründen wurden diese Aktionen dem Administrator per E-Mail gemeldet, zusammen mit Links zu Schwarz / Whitelist der Adresse im Falle einer falschen Bewertung.

Ich habe seit ungefähr 6 Monaten nicht mehr mit diesem Kunden gesprochen, aber zuletzt habe ich gehört, dass das System ziemlich effektiv funktioniert.

Nebeneffekt: Wenn Sie über ein ähnliches Erkennungssystem nachdenken, das auf der Begrenzung der Trefferquote basiert, sollten Sie mindestens eine Minute (und vorzugsweise mindestens fünf Minuten) verwenden. Ich sehe eine Menge Leute über diese Art von Systemen sprechen , die zu blockieren jemand wollen , die 5-10 Treffer in einem zweiten spitzen, die auf bildlastigen Seiten Fehlalarme erzeugen kann (es sei denn , Bilder von der Tally ausgeschlossen sind) und wird erzeugen falsch Positiv, wenn jemand wie ich eine interessante Site findet, von der er alles lesen möchte. Daher öffnet er alle Links in Registerkarten, um sie im Hintergrund zu laden, während er die erste liest.

Dave Sherohman
quelle
5
Ich finde, dass falsch positiv aufgrund des Blockierens des Webcrawlers den Webverkehr absolut beendet. Sie verärgern im Grunde genommen die 99,8% Ihres Benutzers in einem schlechten Versuch, Crawler zu behindern, die diese beschriebene naive Methode leicht umgehen können. Niemals eine gute Idee, den Benutzerzugriff zu verweigern oder zu behindern, da dies die Benutzererfahrung mit Ihrer Website zerstört.
KJW
14

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

Verwenden Sie knifflige URLs und HTML:

<a href="https://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"> <!-->
Kornel
quelle
9

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 erwarten, dass einige Leute, die sich den Quellcode ansehen, 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 User Agent)

Georg Schölly
quelle
1
Es sei denn, der Bot überprüft die CSS-Attribute des Links und folgt dem Link nicht, da er für einen menschlichen Benutzer nicht sichtbar ist ...
Bob Somers
1
Das Beschriften des Links "NICHT auf mich klicken" wäre eine bessere Idee. Wenn jemand CSS deaktiviert hat (oder keine CSS-Unterstützung), wird der Link sichtbar.
dbr
Gute Idee. Ändern Sie den Text möglicherweise in "." und der CSS-Stil, der zum Hintergrund passt - für die meisten Benutzer unsichtbar? Oder führen Sie ein Skript aus, um es nach 1 Sekunde auszublenden, sodass es nur für einen Bot sichtbar ist, der den Befehl zum Verbergen von Javascript nicht mit dem Link verknüpfen kann.
Underverse
1
Hüten Sie sich vor Black Hat Strafe aus SEO-Sicht.
Alfred Wallace
6

Eine Sache, die Sie nicht aufgelistet haben und die häufig verwendet wird, um fehlerhafte Crawler zu erkennen.

Erfolgreiche Web-Crawler brechen ihre Treffer auf, damit sie eine Website nicht mit Anfragen überschwemmen. Schlechte werden eines von drei Dingen tun:

  1. Klicken Sie nacheinander auf sequentielle Links
  2. Klicken Sie in einer Paralell-Sequenz (2 oder mehr gleichzeitig) auf sequentielle Links.
  3. Hit sequentielle Links in einem festen Intervall

Außerdem werden einige Offline-Browsing-Programme eine Reihe von Seiten verschlingen. Ich bin mir nicht sicher, welchen Schwellenwert Sie verwenden möchten, um die Blockierung nach IP-Adresse zu starten.

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

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

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

Update zum Ausblenden von Links

Wenn es darum geht, Links auszublenden, können Sie ein Div unter ein anderes setzen, mit CSS (indem Sie es an erster Stelle in der Zeichenreihenfolge platzieren) und möglicherweise die Z-Reihenfolge festlegen. Ein Bot konnte das nicht ignorieren, ohne all Ihr Javascript zu analysieren, um zu sehen, ob es sich um ein Menü handelt. Bis zu einem gewissen Grad können Links in unsichtbaren DIV-Elementen auch nicht ignoriert werden, ohne dass der Bot das gesamte Javascript analysiert.

Wenn diese Idee zum Abschluss gebracht wird, könnte nicht aufgerufenes Javascript, das möglicherweise die verborgenen Elemente aufzeigt, eine Teilmenge von Javascript-Parsing-Bots zum Narren halten. Und es ist nicht viel Arbeit zu implementieren.

Chris
quelle
16
Ein schwerwiegender Fehler bei der Methode "JavaScript ignorieren bedeutet, dass Sie ein Bot sind": Einige von uns verwenden das NoScript-Plugin. Auf keiner Website wird JavaScript ausgeführt, es sei denn, ich habe die Website auf die Whitelist gesetzt und bin mir ziemlich sicher, dass ich kein Bot bin.
Dave Sherohman
2
Bots können jetzt Javascript ausführen ... es ist 2013, um Himmels willen. so geht das ganze Argument. Wer sagt, dass Webcrawler Websites in aufeinanderfolgender Auswahl besuchen? eine weitere große Annahme.
KJW
1
Das Javascript diente nur zur Anzeige eines Honeypot-Links. Die Idee ist , dass die Bots wird das Javascript analysieren , die ein Honeypot Link sichtbar machen, so dass sie eher dem Link zu folgen. Für einen echten Benutzer würde der Code, der den Link sichtbar macht, jedoch niemals ausgeführt. Daher wären NoScript-Benutzer und alle, die Funktionen nicht zufällig ausführen, in Ordnung. Trotzdem bin ich mir nicht sicher, warum / wie ein Bot zufällig Code ausführt, und wenn er eine statische Analyse durchführen würde, um festzustellen, ob ein Element sichtbar werden könnte, wäre dies ein ausgefallener Bot.
Rick
4

Eine einfache Bot-Erkennungsmethode, von der ich für Formulare gehört habe, ist die versteckte Eingabetechnik. Wenn Sie versuchen, ein Formular zu sichern, geben Sie eine Eingabe in das Formular mit einer ID ein, die völlig legitim aussieht. Verwenden Sie dann CSS in einer externen Datei, um es auszublenden. Oder wenn Sie wirklich paranoid sind, richten Sie so etwas wie jquery ein, um das Eingabefeld beim Laden der Seite auszublenden. Wenn Sie dies richtig machen, fällt es einem Bot sehr schwer, das herauszufinden. Sie wissen, dass diese Bots es in der Natur haben, alles auf einer Seite auszufüllen, besonders wenn Sie Ihrer versteckten Eingabe eine ID von so etwas wie id = "fname" usw. geben.

Agiler Noob
quelle
2
nicht, wenn die Bots warten können, bis die Abfrage beendet ist, wie es ein normaler Browser kann. Dies hätte in den frühen
00ern
3

Es ist eigentlich nicht so einfach, mit den guten Zeichenfolgen für Benutzeragenten Schritt zu halten. Browserversionen kommen und gehen. Das Erstellen einer Statistik über Benutzeragentenzeichenfolgen nach unterschiedlichen Verhaltensweisen kann interessante Dinge aufdecken.

Ich weiß nicht, wie weit dies automatisiert werden könnte, aber zumindest ist es eine Unterscheidungskraft.

iny
quelle
3

Ungetestet, aber hier ist eine schöne Liste von Benutzeragenten, aus denen Sie einen regulären Ausdruck machen können. Könnte Sie den größten Teil des Weges 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|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]

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

Brian Armstrong
quelle
1

Sie können auch Empfehlungen überprüfen. Keine Überweisung könnte den Bot-Verdacht auslösen. Eine schlechte Empfehlung bedeutet sicherlich, dass es sich nicht um einen Browser handelt.

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

* 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 von Google für Black Hat SEO auf die schwarze Liste gesetzt werden :)

Donau-Seemann
quelle
1
Was genau und warum würden Sie auf die schwarze Liste gesetzt?
Conteh
1

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

Nach meiner Erfahrung sind die Blocker Nummer eins unseres Webcrawlers (der natürlich einen IE oder Firefox UA verwendet und robots.txt. Duh. Nicht gehorcht) Websites, auf denen absichtlich Malware gehostet wird. 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 sag ja nur, wenn Sie Webcrawler blockieren, bringen Sie sich in eine schlechte Gesellschaft.

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

Zan Lynx
quelle
15
Es tut mir leid, aber wenn Sie einen Crawler ausführen, der robots.txt nicht befolgt, halten Sie sich nicht an die Regeln. Wenn Sie sich nicht an die Regeln halten, bringen Sie sich selbst in eine wirklich schlechte Gesellschaft. Indem Sie vorschlagen, dass die Durchsetzung der vom Eigentümer der Website (in robots.txt) festgelegten Regeln eine schlechte Praxis ist, stellen Sie das Problem fälschlicherweise auf den Kopf. Sie geben grundsätzlich an, dass Sie nicht verstehen, wer der rechtmäßige Eigentümer von Inhalten ist.
Jacco
11
@Jacco: Wenn ein Crawler, der nach Malware sucht, die Regeln befolgt, würde er niemals welche finden. Sprechen Sie mit den Malware-Autoren.
Zan Lynx
5
@Jacco: Prozentsatz der legitimen Websites, die versuchen, nicht konforme Crawler zu blockieren? Unter 1%. Malware-Sites, die es versuchen? Über 60%. Also ja, es ist verdächtig.
Zan Lynx
4
@Jacco eigentlich nein, es gibt keine Besitzer von Inhalten im Web, wenn diese öffentlich sind. Jemand, der dies tut, ohne manuell zu kopieren und einzufügen, sollte eine Auszeichnung erhalten, keine Strafe. Dieses gesamte Urheberrechtskonzept muss im Internet abgeschafft werden. Nur kreative Innovation und Vertrauen können Wert schaffen und die Aufmerksamkeit der Menschen verdienen, nicht durch die Gefahr eines undurchsichtigen rechtlichen Schleiers.
KJW
Alles, was dieser Ausreißer anzeigt, ist, dass die Person, die die Site betreibt, viel Zeit und Gedanken in die Site gesteckt hat und über ein gewisses Maß an technischen Fähigkeiten verfügt. Das schließt natürlich den größten Teil der Glockenkurve aus.
Parthian Shot
1

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

Ich schreibe Stealth-Crawler und wenn sie einzeln gebaut werden, hat keine Menge von Honigtöpfen oder versteckten Links irgendeine Auswirkung - der einzige wirkliche Weg, spezialisierte Crawler zu erkennen, besteht darin, die Verbindungsmuster zu überprüfen.

Die besten Systeme verwenden AI (z. B. Linkedin), um dies zu beheben.
Die einfachste Lösung besteht darin, Protokollparser zu schreiben, die IP-Verbindungen analysieren und diese IPs einfach auf die schwarze Liste setzen oder zumindest vorübergehend Captcha bereitstellen.


Wenn z. B. alle 2 Sekunden IP X angezeigt wird, das eine Verbindung zu foo.com/cars/*.htmlanderen Seiten herstellt, jedoch keine anderen Seiten, handelt es sich höchstwahrscheinlich um einen Bot oder einen hungrigen 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 Benutzerdefiniertes schreiben, das möglicherweise abschreckend genug ist, damit sich der Aufwand für den Crawler nicht lohnt.

Sie müssen jedoch eine Frage stellen, ob Sie bereit sind, falsch positive legitime Benutzer zu verwenden und ihnen Unannehmlichkeiten zu bereiten, um den Bot-Verkehr zu verhindern. Der Schutz öffentlicher Daten ist ein unmögliches Paradoxon.

Granitosaurus
quelle
-1

kurze Antwort: Wenn ein Programmierer mittlerer Stufe weiß, was er tut, können Sie einen Crawler nicht erkennen, ohne den tatsächlichen Benutzer zu beeinträchtigen. Wenn Sie Ihre Informationen öffentlich haben, können Sie sie nicht gegen einen Crawler verteidigen ... es ist wie das erste Änderungsrecht :)

Alex MAN
quelle