-
[botdetection] Bot Erkennung
Hallo.
Bot Detection dient als Hilfsklasse für andere Extensions (Frontend) die erkennen müssen, ob der Zugriff von Mensch oder Maschine erfolgt :D
Eine sichere Erkennung gibt es dabei natürlich nicht.
Es wird über 2 Verfahren versucht dieses zu erkennen:
- User Agent Kennung
- IP Adresse
Erste Version beinhaltet eine Methode für die Agent (BD_CheckBotAgent) und eine für die IP Erkennung (BD_CheckBotIP).
Ein Test ist beigefügt für den direkten Aufruf:
Code:
http://deine-domain.de/system/modules/botdetection/test/ModuleBotDetectionTest.php
Damit wird auch gezeigt wie das Modul verwendbar wäre, für PHP Dateien die direkt aufrufbar sind wie z.B. cron.php oder banner_clicks.php vom Modul Banner.
Desweiteren sind 2 Frontend Module als Demo für die Implementierung in eigene Module beigefügt.
Mein Banner Modul habe ich bereits in meiner Testumgebung erfolgreich darauf angepasst, Visitors wird folgen. Läuft beides wird dieses dann auch entsprechend veröffentlicht.
Zur Zeit geben die beiden Methoden True oder False zurück. (True = Bot)
Ab Version 0.2.0 kam eine neue Methode (BD_CheckBotAgentAdvanced) dazu, die über eine externe Konfigurationsdatei die Erkennnug über User Agent durchführt und als Ergebnis den Kurznamen des Bots zurückgibt bzw. "false", wenn keine Erkennung erfolgte.
Im ER ist das Modul hier zu finden.
Wünsche, Fehlermeldungen, Korrekturen hier oder direkt ins Ticketsystem.
Beschreibung im Wiki wird noch ergänzt.
Testen tue ich das ganze übrigens mit dem Firefox Add-on "User Agent Switcher", cool so als Googlebot unterwegs zu sein :cool:
-
Hi,
zur Info, die Methode BD_CheckBot wird demnächst umbenannt in BD_CheckBotAgent, damit ist das dann einheitlicher zu BD_CheckBotIP.
Die Liste mit den Strings der Bots in der feinen Suche wird demnächst ausgelagert in eine extra Konfigurationsdatei, da ich vorhabe diese zu genenrieren.
Eigene Suchstrings kann man demnächst auch in der localconfig.php definieren wie die eigenen gefundenen IP Adressen. (siehe Hinweise in config/bot-ip-list.txt)
-
[botdetection] Bot Erkennung , Version 0.2.0 beta1
So, nun ist eine weitere Version im ER gelandet. (Links siehe ersten Beitrag)
Wie angedroht, wurde die Methode BD_CheckBot umbenannt in BD_CheckBotAgent.
Eine neue Methode BD_CheckBotAgentAdvanced kam hinzu, die über eine externe Konfigurationsdatei die Erkennung über User Agent durchführt und als Ergebnis den Kurznamen des Bots zurückgibt bzw. "false" wenn keiner Erkennung erfolgte.
Derzeit sind 857 Kennungen registriert.
Die ersten beiden Methoden, BD_CheckBotAgent und BD_CheckBotIP, geben im Vergleich dazu nur "true" oder "false" zurück.
-
Moin BugBuster,
nur kurz, ich hatte leider noch keine Zeit, Deine neue Extension zu testen, aber sie wird mir jedenfalls sehr nützlich sein. Die Methode BD_CheckBotAgentAdvanced() hört sich sehr gut an, ich hatte vor einiger Zeit z.B. die Anforderung (in einem nicht TL Projekt), bestimmten (gutwiligen) Bots den Zugriff auf bestimmte Seiten/Dateien zu erlauben, anderen dagegen nicht.
Danke für die Auslagerung.
LG, Georg
-
Suche nach neuen Bots
Da ich für die Advanced Suche mich auf eine Konfig von Dritten verlasse, wollte ich mal wissen ob auch alle Bots erkannt werden die bei mir so auflaufen.
In meiner access.log habe ich, zumindest mir, unbekannte gefunden.
Also habe ich mal ein Add-on zu meiner Bot Detection "geschrieben", welches mit alle Bots (User Agent) in eine Log schreibt die nicht durch die Advanced Methode erkannt werden.
Da die Konfig nur Bot Signaturen enthält brauche ich einen Zugriff den nur Bots tun, nicht ein normaler Surfer.
Da viel mir nur die robots.txt ein.
Also schrieb ich in meine htaccess:
Code:
RewriteRule robots.txt myrobots.php
Die PHP Datei muss nun einerseits den Inhalt der robots.txt ausgeben und weiterhin prüfen ob das ein unbekannter Bot war.
Der Einfachheit halber gebe ich den Inhalt der robots.txt direkt aus und lese die nicht erst über Dateioperationen ein. Nicht ganz updatesicher, wenn Leo dran was ändert, aber für meinen Fall nicht tragisch.
PHP-Code:
<?php
Header('Content-type: text/plain');
echo "User-agent: *
Disallow: /plugins/
Disallow: /system/
Disallow: /templates/
Disallow: /typolight/
Disallow: /CHANGELOG.txt
Disallow: /cron.php
Disallow: /flash.php
Disallow: /GPL.txt
Disallow: /INSTALL.txt
Disallow: /LGPL.txt
";
//ab hier beginnt die Zukunft
define('TL_MODE', 'FE');
require('system/initialize.php');
class ModuleBotDetectionGenerate extends ModuleBotDetection
{
public function run()
{
$test01 = $this->BD_CheckBotAgentAdvanced(); // Check for Bot
if ($test01 === false)
{
if ($this->Environment->httpUserAgent) {
$UserAgent = trim($this->Environment->httpUserAgent);
} else {
return false; // No return address, no search.
}
}
if ($UserAgent)
{
log_message("ModuleBotDetectionGeneration: ".$UserAgent,"genuseragents.log");
}
}
}
$objBotDetectionGen = new ModuleBotDetectionGenerate();
$objBotDetectionGen->run();
?>
Testen kann man das über Zugriff mit eigenem Browser, die User Agent Kennung landet dann in der Logdatei, da der Browser ja ein unbekannten Bot darstellt :D
Mal sehen was so ankommt die Tage.
-
Hallo BugBuster,
aus so eine Idee muss man erst mal kommen! :eek:
-
Im Kopf habe ich noch ne weitere, sowas habe ich mal vor den TL Zeiten gebastelt.
In der robots.txt wird ein Disallow auf eine Datei eingetragen die nur für diesen Zweck angelegt wird und nirgends sonst verlinkt wird.
Ruft nun ein bot diese Datei auf, hält er sich nicht an die Angaben und wird als "böse" eingestuft.
Was man dann mit dieser Info tut, bleibt noch zu überlegen.
-
Ein klassischer Honeypot – gibt's noch den versteckten "Guestbook-Link"? ;)
Aber Aufpassen, nicht immer ist ein Besucher einer robots.txt bzw. der darin aufgelisteten Dateien ein Bot, deswegen wäre ich mit generellen Sperren vorsichtig.
-
nee, schon klar. Darum gings mir auch nicht, eher um die Erfassung um dann später wie auch immer zu reagieren. Also mit biomechanischer Schnittstelle zwischendurch. :D
-
Schon 2 gefunden...
So,
die Advanced findet folgende Bots momentan nicht (bei mir aufgetaucht):
Code:
TrueKnowledgeBot (http://www.trueknowledge.com/tkbot/; tkbot -AT- trueknowledge _dot_ com)
Code:
Mozilla/5.0 (compatible; ptd-crawler; +http://bixolabs.com/crawler/ptd/; crawler@bixolabs.com)
Die schnell Variante findet diese, durch den Teilstring "bot" in beiden der Kennungen.
Werd ich demnächst in die Liste mit aufnehmen.
-
Liste der Anhänge anzeigen (Anzahl: 1)
So, die Test Datei habe ich ein wenig gefärbt, nun erkenne ich besser welche Bots erkannt werden und welche nicht. Die roten sind hier wie gesagt die beiden die derzeit nicht erkannt werden von der Advanced Methode.
Es gibt auch nur noch eine Stelle darin, wo die Agent Strings definiert werden.
Einfach ne Zeile anhängen und schon wird es doppelt geprüft.
Anhang 1766
Ich werde als zweite Demo ein Frontend Modul bauen mit einem Formular, darin kann man einen Agent String übergeben und prüfen lassen. Ist zwar mehr für mich gedacht, aber sicherlich auch sinnvoll für andere die selber in die access.log schauen und wissen wollen ob da was erkannt werden würde.
Nachtrag: Beide Demos sind auch auf der Projekt Homepage zu finden.
-
[botdetection] Bot Erkennung , Version 1.0.0 stable
So, nachdem ich eine Weile damit gearbeitet habe, hab ich das nun in den Status 1.0.0 stable gehoben.
Da mein "Fang Script" noch einige Bots gefunden hat, die durch den Drittanbieter nicht erkannt wurden, habe ich diese selbst noch hinzugefügt:
- TrueKnowledgeBot
- ptd-crawler bixolabs.com
- Spock Crawler
- NetStudyBot
- BotOnParade
- Taptubot
-
Hab ich doch die Sprachfiles vergessen zu aktualisieren.
Daher neues Build generiert.
-
Ist es deswegen notwendig hier nochmal zu posten?
-
a) Ja, um PMs zu entgehen warum ein neues Build so kurz später nach der neuen Version von mir erzeugt wurde.
b) Hab ich was verpasst?
-
Ich seh nur pushing ;) hättest deinen vorherigen Post auch bearbeiten können, anstatt einen neuen zu schreiben.
PMs kann man ignorieren, außerdem bezweifel ich, dass da so viele kommen … sonst müssten ja im Forum ein unermessbares Datenvolumen 'rumschwirren, bei den vielen "Build-Updates".
-
neue Bots gefunden
Zur Info, die Advanced Variante (BD_CheckBotAgentAdvanced) findet folgende Bots momentan (1.0.0 Build 9) nicht (bei mir aufgetaucht):
Code:
nodestackbot/0.1 (bot@nodestack.com http://nodestack.com/bot.html)
Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; obot)
Die schnell Variante (BD_CheckBotAgent) findet diese, durch den Teilstring "bot" in beiden der Kennungen.
Werd ich demnächst in die Liste mit aufnehmen.
Noch 3:
Code:
Mozilla/5.0 (compatible; Search17Bot/1.1; http://www.search17.com/bot.php)
yacybot (amd64 Linux 2.6.31.12-0.2-desktop; java 1.6.0_0; Europe/de) http://yacy.net/bot.html
Cityreview Robot (+http://www.cityreview.org/crawler/)
-
[botdetection] Bot Erkennung , Version 1.0.1 stable
Im Update sind nur neue Bots in der Erkennnung aufgenommen worden:
- nodestackbot
- obot
- yacybot
- Search17Bot
- Cityreview Robot
-
[botdetection] Bot Erkennung, Version 1.0.4 stable
Mittlerweile sind wieder einige neue dazugekommen seit 1.0.1:
- (bot; http://) , in BD_CheckBotAgentAdvanced: "No-Name-Bot"
- S2Bot
- Rassler
- Caret Byte
- O'Reilly Link Checker
- Semager
- CligooRobot
- gonzo / suchen.de
- LexxeBot
- Java/1.6
- SemtoBot
- Ruky-Roboter
- SheenBot
- Google-Site-Verification
- Microsoft URL Control (Harvester!)
-
[botdetection] Bot Erkennung, Version 1.0.6 stable
Mittlerweile sind wieder einige neue dazugekommen seit 1.0.4:
- AppEngine-Google
- mxbot
- StatoolsBot
- BixoLabs Crawler
- Huaweisymantecspider
- TwengaBot
-
[botdetection] Bot Erkennung, Version 1.1.1 stable
Mittlerweile sind wieder einige neue dazugekommen seit 1.1.0:
- Hoge
- Tagoobot
- Bingbot
- Peew Crawler
- FindShare
-
[botdetection] Bot Erkennung, Version 1.2.0 stable
Neue Bots in Version 1.2.0:
- picmole
- SiteBot
- Yasaklibot
- Dropcatcher
Außerdem wurde eine aktuelle browscap.ini für die Basis der Bot Datenbank verwendet.
-
[botdetection] Bot Erkennung, Version 1.2.1 stable
Neue Bots in Version 1.2.1:
- adressendeutschland.de
- DoCoM
- CMS Crawler
- GetWeb
- NetSpider
- Rippers
- HTTrack
- NetAnts
- Website eXtractor
- WebWhacker
-
Servus,
seit kurzem spamt (mehrere hundert Meldungen pro Minute) es mein Log mit folgender Meldung voll :(
BotDetection extension required!
Unter Info steht das:
Details: BotDetection extension required!
Funktion: ModulBanner BannerCheckBot
IP Adresse: 66.249.66.149
Browser: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Hab die Erweiterung aber schon mehrfach neu installiert :(. Modul Banner ist die Version 2.0.0 stable 20
Gruß
-
Hallo Kahmoon,
die Banner-Erweiterung braucht seit einigen Releases die Botdetection-Erweiterung. Die Abhängigkeit ist beim Modul eingetragen und für neue Installationen wird die Botdetection gleich mit aufgespielt.
Leider ist das bei Updates nicht so, nachträgliche Abhängigkeiten werden von der Erweiterungsverwaltung bisher nicht beachtet. Ich habe dazu bereits ein Ticket angelegt:
http://dev.contao.org/issues/2793
-
Alles klar. Aktueller Workaround? :) Beide Module sind ja installiert.
Gruß
-
Oh, da bin ich ratlos. Da kann vielleicht BugBuster helfen.
BugBuster erreicht man oft im IRC Chat
http://de.contaowiki.org/Chat_HowTo
-
Wenn Botdetection installiert ist,sollte diese Meldung aber nicht kommen!
Ist das Modul eventuell deaktiviert?
-
Ich hab jetzt beide Module frisch installiert. Seit dem kam es nicht mehr. Musste nur alle Banner neu einrichten ;)
-
Hmm, vielleicht hätte ja eine Reparatur Installation schon gereicht.
Na wenigstens es läuft wieder, ich hoffe es ware nicht zu viele Banner.
-
Ich hab davor beide "repariert". Das hatte nichts geholfen.
-
Das macht die Sache noch seltsamer.
-
[botdetection] Bot Erkennung, Version 1.2.2 stable
Neue Bots in Version 1.2.2:
- Purebot
- Spinn3r
- suggybot
- Ezooms
-
Hallo BugBuster,
wäre es eigentlich auch möglich, über die Erweiterung "botdetection" die - je nach eingestellter Browsersprache - automatische Auslieferung der jeweils passenden Seitenstruktur durch Contao entsprechend zu beeinflussen?
Oder anders ausgedrückt: Könnte man für verschiedene Suchmaschinen-Bots/Crawler eine bevorzugt auszuliefernde Seitenstruktur (einer bestimmten Sprache) festlegen?
Wenn das ginge, dann könnte man ja auch die in diesem Thema angesprochene Problematik etwas entschärfen oder?
Dann nämlich könnte man u.a. folgendes Anwendungsszenario realisieren:
- Contao-Installation mit drei Seitenstrukturen für die Sprachen "Deutsch", "Englisch" und "Französisch"
- Seitenstruktur "Deutsch" als Sprachen-Fallback
- Deutsche Seitenstruktur soll auch bevorzugt den Suchmaschinen-Bots ausgeliefert werden
Das beabsichtigte Verhalten sollte demnach sein:
- Besucher mit "deutschem" Browser: Seitenstruktur [de]
- Besucher mit "englischem" Browser: Seitenstruktur [en]
- Besucher mit "französischem" Browser: Seitenstruktur [fr]
- Besucher mit "russischem" Browser: Seitenstruktur [de]
- GoogleBot als "englischsprachiger" Crawler: Seitenstruktur [de]
Wäre sowas grundsätzlich im Zusammenhang mit der Hilfsklasse "botdetection" über eine eigene Erweiterung zu implementieren?
-
Ja, so eine Idee hatte ich auch schon im Kopf.
Bin nur noch nicht dazu gekommen eine geeignete Methode zu finden, um die Browsersprache zu überstimmen bzw. zu schauen ob das überhaupt möglich ist.
Muss ich mich mal ransetzen.
Aber das wäre dann, wie richtig angedeutet ein eigenes Modul, welches am besten per hook sich irgendwie einklinkt. Mal sehen was ich so finde.
Nachtrag: ich glaub ich habe das was gefunden, mal sehen wie ich am Wochende Zeit finde, um das mal zu testen.
-
In der Praxis müsste man wahrscheinlich eh nur die drei Suchbots von Google, Bing und Yahoo entsprechend berücksichtigen, zumal all die anderen ohnehin keine reale Bedeutung haben.
Von daher wäre es dann auch egal, wenn bei diesen "bedeutungslosen" Suchbots - so wie bisher auch - die Seitenstruktur mit den englischen Seiten ausgeliefert wird...
-
Replace Language
Habe mal angefangen.
http://www.contao-forge.org/projects/replacelanguage
Die Backend Definition und das Einklinken scheinen schon zu funktionieren, die Botdetection Einbindung muss ich noch machen.
-
Zitat:
Zitat von
BugBuster
Wenn ich das im Wiki richtig sehe, dann hast Du "Replace Language" im Backend-Modul "Einstellungen" vorgesehen. Wäre es nicht günstiger, diese Einstellung im "Startpunkt einer Webseite" zu implementieren? So könnte man nämlich für Multidomain-Installationen jeweils unterschiedliche Vorgaben hinsichtlich der Sprachersetzung für Suchmaschinen festlegen.
-
Wie warscheinlich ist das, dass jemand eine Mutlidomain-Multilanguage Installation fährt und verschiedene Zielsprachen benötigt?
Das würde die Sache wesendlich verkomplizieren.
-
Mir ist das auch nur in den Sinn gekommen, da eine solche Multidomain-Umgebung mit jeweils verschiedenen Sprachen erst gestern/vorgestern hier diskutiert wurde.
Aber Du hast sicherlich recht: Das würde in der Umsetzung wahrscheinlich ungemein komplexer werden.
-
[botdetection] Bot Erkennung, Version 1.2.3 stable
Neue Bots in Version 1.2.3:
- 123peoplebot
- Internet Archive (archive.org_bot)
Bugfix: false positive : AppleWebKit in CheckBotAgentAdvanced -> (Google Web Preview)
Update empfohlen bei Einsatz vom Modul Visitors, da durch den Fehler öfters AppleWebKit Browser fälschlicherweise als Bot identifiziert wurden.
-
Vergleich Webalizer / Visitors Statistik
Hallo,
die Unterschiede zwischen Webalizer und Visitors Statistik sind doch erheblich.
Gestern hatten wir z.B. ca. 90 Besucher im Visitors Modul. Die Webalizer Statistik zeigt 198 Sites (unterschiedliche IP Adressen) und 243 Visits (erneuter Besuch nach 30 Minuten). Als Blockzeit haben wir i.d. Besucherzähler-Definition 6 Stunden konfiguriert.
Heisst das wir haben 100 Besuche von Bots? Wie sind Euere Erfahrungen?
Danke für's Feedback!
-
-
"Traue keiner Statistik, die du nicht selbst gefälscht hast."
-
vielen Dank für den Link, sehr informativ! Der erhebliche Unterschiede hat mich doch sehr verwundert.
-
[botdetection] Bot Erkennung, Version 1.3.0 stable
Neue Bots in Version 1.3.0
- New Crawler: HTTP_Request2/0.5.1 (PHP)
- New Crawler: Discobot
- New Bot/Crawler: Robots Bot
PHPUnit Testumgebung geschaffen, um neue Versionen zu validieren, der Handtest wurde langsam etwas aufwändig ;)
(nicht mitgeliefert)
-
[botdetection] Bot Erkennung, Version 1.3.1 stable
Neue Bots in Version 1.3.1
- New Crawler: Teragram/SAS Crawler
- Bot/Crawler: Birubot
- New Crawler: iCjobs
sowie kleinere Source Code Umstellungen.
-
List of User Agent Strings
Hi BugBuster,
ich habe gerade Dein Bot Detection Modul schätzen gelernt, da er mir geholfen hat ein kniffliges Zählproblem zu lösen bzw. zumindest die Ergebnisse deutlich zu verbessern. Großes Dankeschön dafür :D
Vielleicht hilft ein Abgleich mit http://www.useragentstring.com/pages...gentstring.php die Bot-Erkennung weiter zu verbessern.
Nachtrag:
Auch das ist eine interessante Seite zum Thema Bots und Bot-Erkennung:
http://www.barrierefreie-webloesunge...0112_nutch.php
-
[botdetection] Version 4.0.0 RC1 über composer
Info vorerst für Entwickler die meine Erweiterung nutzen.
Botdetection wurde komplett neu geschrieben. Hauptsächlich weil "mein" Hauptlieferant von Signaturen die Struktur geändert hat.
Aber bei der Gelegenheit habe ich dann gleich alles etwas umgeschrieben.
Meine Erweiterungen werde ich nach und nach dagegen testen und dann ggf. die Abhängigkeit anpassen.
Composer sollte also zur Zeit nicht auf die Idee kommen die neue Version zu installieren.
Wer von Euch Botdetection für eigene Dinge gebraucht hat, z.B. für eigene Erweiterungen sollte sich diese Datei mal ansehen:
botdetection/blob/master/UPGRADE.md
Was darin fehlt sehe ich gerade, Botdetection 4.0 ist nun erst ab Contao 3.5 freigegeben und ab PHP 5.4., besser wäre 5.5 oder höher.
Da stehen alle API Änderungen drin. Derzeit ist die Version 4.0.0 noch abwärtskompatibel, die Version 5.0.0 wird dann die deprecated Methoden nicht mehr unterstützen.
(Die Version 5.0.0 wird die für Contao 4 werden.)
Und bekommt kein Schreck, um das erste Initialisieren abzukürzen, würde sonst über eine Minute dauern, bringt die Erweiterung die Signaturen gleich mit.
Dadurch wird die Erweiterung ca 30MB groß. Durch die runonce wird dann noch ein Cache generiert, das dauert dadurch dann nur ca. 7 Sekunden.
Wie in der alten Version auch sind die beiden Demo Module wieder dabei um die Nutzung für Entwickler zu zeigen.
Ach ja, eine Changelog wird es auch zukünftig geben, ich experimentiere da grad mit Generatoren.
botdetection/blob/master/CHANGELOG.md
-
[botdetection] Version 4.1.0 über composer
So, Botdetection ist nun wieder kleiner, die 44 MB Signaturdatei vom externem Lieferanten konnte ich verkleinern auf < 1MB.
Dadurch ist die Generierung des Caches auch <1s.
Außerdem ist es jetzt möglich, über die localconfig.php eigene Referrer zur Erkennung zu definieren wie folgt:
PHP-Code:
$GLOBALS['BOTDETECTION']['BOT_REFERRER'][] = 'mylocal-bugbuster-bot.ninja/bot.php';
$GLOBALS['BOTDETECTION']['BOT_REFERRER'][] = 'joinandplay.me';
falls jemand neue Spam Referrer blocken will die Botdetection noch nicht (er)kennt.
Genutzt wird von den Angaben nur der Domain Anteil.
-
[botdetection] Version 4.2.2 über Composer
Eine neue Version 4.2.2 von Botdetection ist verfügbar über Composer.
Neu: Es werden nur noch GET und POST Zugriffe gezählt. Es kam durch Referrer-Spam per HEAD Zugriffe (mit gültiger Agent Kennung) zu fehlerhaften Zählungen.
Dazu muss man wissen, dass auch bei HEAD Zugriffen die PHP Engine anläuft, von Apache nach Sendung der HEAD Daten aber abgebrochen wird.
Diese Zeit scheint aber zu reichen das meine Visitor Erweiterung es geschafft hat den Zugriff zu zählen. (vermutlich ist auch die Banner Erweiterung betroffen)
Für das ER2 wird diese Anpassung demnächst nachgezogen.
-
[botdetection] Version 4.2.2 über ER2
Nun auch für ER2 verfügbar.