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:
- identifiziert sich als Bot in der Benutzeragentenzeichenfolge
- 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) :
- Hinzufügen eines Verzeichnisses, das nur in der robots.txt aufgeführt (als nicht zulässig) aufgeführt ist,
- 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
- erkennen, wer die Großschreibung nicht versteht,
- Erkennen Sie, wer versucht, Antworten zu veröffentlichen, aber das Captcha immer nicht besteht.
- Erkennen von GET-Anforderungen an reine POST-Ressourcen
- Intervall zwischen Anforderungen erkennen
- Reihenfolge der angeforderten Seiten erkennen
- Erkennen, wer (konsistent) https-Ressourcen über http anfordert
- 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:
- Es löst eine Falle aus
- Es Anfrage
robots.txt
? - 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.
quelle
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:
In HTML können Sie viele Tricks mit Kommentaren, CDATA-Elementen, Entitäten usw. verwenden:
quelle
Eine einfache Lösung besteht darin, einen Link zu erstellen und ihn unsichtbar zu machen
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)
quelle
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:
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 LinksWenn 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.
quelle
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.
quelle
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.
quelle
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:
Entnommen aus: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/
quelle
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.
Das würde ich nicht tun. Sie können von Google für Black Hat SEO auf die schwarze Liste gesetzt werden :)
quelle
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.
quelle
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/*.html
anderen 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.
quelle
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 :)
quelle