Frage von Belatucradus, 33

Gibt es eine Möglichkeit einen Bot für eine Webseite zu integrieren, der gezielt nach Wörtern sucht, die er dann raus filtert?

Guten Tag.

Gibt es eine Möglichkeit bei HTML einen Bot zu scripten der gezielt Nutzer Informationen sammelt und Wörter, und gewisse Wörter als "schlecht" erkennt, und diesen Nutzer dann sperrt oder verwarnt ?

Bin ein hobby Programmierer und habe schon ein paar beta Bots aber irgendwas fällt mir einfach.

Mfg, Belatucradus.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TeeTier, Community-Experte für programmieren, 21

Ich kombiniere immer gerne einen "Hell Ban" mit einer Art "ELIZA". Wenn dir beide Begriffe nichts sagen, googel ruhig mal danach. :)

Kurzzusammenfassung: Wenn jemand gegen die Regeln verstößt, oder gar als Troll erkannt wird, werden all seine Postings für alle anderen unsichtbar ... außer für ihn selbst. Der ELIZA-Part sorgt dann dafür, bezogen auf Stichwörter aus den Trollpostings Fragen zu stellen und beschäftigt so den Troll dauerhaft.

Es werden mehrere Pseudo-User (inkl. zufälligem Profilbild, Namen, etc.) generiert, deren "Antworten" auf die Trollfragen erst nach einer gewissen Zeit (richtet sich nach Zeichenanzahl und zufälliger zusätzlicher Wartezeit; meist wenige Minuten) veröffentlich werden.

Die Texte der ELIZA-Implementierung sind bewusst knapp gehalten, um nicht aufzufliegen, der Ton wird mit der Zeit langsam aber sicher rauer, um Ärgernis oder Streit zu simulieren und es werden wirre Links und Querverweise auf andere Postings oder externe "Quellen" mit eingemischt.

Im Großen und Ganzen hat das alles den Sinn, die Zeit eines Trolls zu binden, bis er langsam immer müder wird, und irgendwann keine Lust mehr hat. Reguläre User bekommen von all dem (dank Hell-Ban) überhaupt nichts mit.

An den Logs konnte ich sehen, dass der Troll mit dem längsten Durchhaltevermögen das ganze über 12 Stunden mitgemacht hat und wirklich alle paar Minuten auf die Zufallsfragen von ELIZA geantwortet hat. Ob er dann einfach keine Lust mehr hatte, oder geschnallt hat mit einem Bot geredet zu haben, weiß ich nicht, aber zumindest hat er definitiv in diesen 12 Stunden keine Zeit gehabt, andere User zu belästigen. :)

Ich denke, handgestrickte Trollfallen sind immer noch am effizientesten. Wer sich mit dem Thema beschäftigen will, dem empfehle ich zum Einstieg das Buch "Natural Language Processing with Python". Das ist selbst für Web-Entwickler mit PHP, Java oder Ruby interessant, da es im Kern nur um die Konzepte geht, und die nötigen Module kann man sich zur Not entweder auch schnell selbst zusammenstricken, oder fertige NLP-Libs einsetzen.

Ich denke, dass 99% aller Entwickler, die versuchen Trolle oder Spambots aufzuhalten, sich noch nie mit NLP beschäftigt haben, was aber jeder mal tun sollte. (bitte nicht mit "Neuro-Linguistischem Programmieren" verwechseln, was etwas VÖLLIG anderes ist)

Also dann, viel Spaß bei deinem Projekt! Aber merk dir eines: Trolle zu "blocken", ist nicht mal ansatzweise so effizient, wie sie zu "beschäftigen"!

PS: Im Hinblick auf automatisierte Skripte und Spambots, guck dir ruhig mal die mitgesendeten Header an! Dabei ist gerade der "User-Agent", der in fast allen Filtern priorisiert wird, der mit ABSTAND unwichtigste. Fast jeder Bot manipuliert den User-Agent so, dass er wie ein Browser aussieht. Dieser Header hat somit einen Wert von exakt NULL.

Beachte mal andere Header und zwar in Kombination zueinander! Guck dir mal den "Accept", "Accept-Language", "Accept-Encoding", "Connection", die HTTP-Version usw. an ... alleine damit, kann man ohne jegliche weitere Tricks weit über 99% aller Bots stoppen. Ich habe zu diesem Zweck einfache Bots in den gängigsten 50 Programmiersprachen geschrieben, und für jede einzelne davon die gängigsten HTTP-Libs eingesetzt. Insgesamt waren es ca. 200 Crawler, deren Requests ich im Original komplett geloggt und analyisiert habe.

Das ganze hat fast 3 Tage gedauert, hat sich aber gelohnt. Allein an der Reihenfolge der Header-Felder kann man Bots von Browsern unterscheiden. Aber da das vor allem bei PHP nicht ohne weiteres möglich ist, da die Reihenfolge der Header durch $_SERVER verfälscht wird, habe ich mich auf den Inhalt diverser Headerfelder konzentriert.

Naja, lange Rede kurzer Sinn: Trolle nach Stichworten, oder Bots nach dem User-Agent zu blocken, ist ein absolut naiver Ansatz, der meist nicht mal funktionieren wird. Wenn du etwas Effizientes haben willst, kommst du um eine Eigenentwicklung nicht drum rum.

PS: Um Bots, die eine Kodierung beachten zum Absturz zu bringen, füge mal an das Ende einer Website mit UTF-8 Kodierung folgenden Code ein:

<!-- #<?php echo "\xff\xff\xff\xff\xff\xff"; ?># -->

Das wird bei weit über 90% aller Dekoder-Bibliotheken eine Ausnahme werfen, oder zumindest ein ungültiges Ergebnis zurück liefern. Wenn man sich auf GitHub umschaut, "vergessen" es viele Bot-Entwickler, solche Fehler abzufangen. Das Ergebnis ist, dass die Software auf dem Rechner des Angreifers abschmiert, und deine Website nicht gecrawlt werden kann.

Dieser kleine Trick hat zwar den Nachteil, dass das Dokument dann nicht mehr valide ist, hat aber keinerlei Auswirkungen auf die Anzeige im Webbrowser und vernünftige Bots, wie die von Suchmaschinen insbes. der Google-Bot, kommen problemlos damit klar. In solchen Fällen werden die Bytes, die nicht dekodiert werden können, einfach ignoriert.

Außerdem kannst du noch gängige Botfallen einbauen, aber das würde das Thema jetzt sprengen.

Viel Spaß! :)

PS: Zum Abschluss gibts noch ein Musikvideo, was überhaupt nichts mit dem Thema zu tun hat:

Antwort
von grumbl, 33

Auf jedenfall nicht in HTML. Du kannst Beitrage nach Wörtern durchsuchen und die Funde zählen und mit dem Benutzernamen abspeichern. Wenn die Funde über eine gewisse Zahl gehen wird der Benutzer abgefragt und gesperrt als Bsp. in PHP gut machbar.

Oder habe ich die Frage falsch verstanden

Kommentar von Belatucradus ,

Guten Tag! - Also könnte ich eventuell auf der Webseite perl oder Java benutzen, oder geht PHP auch ? Bin noch am Tüfteln und am Probieren.
Ja genau das meinte ich.

Kommentar von grumbl ,

Ich hätte es mit PHP gemacht und in MySQL gespeichert, oder was war die Frage mit Perl und Java?

Keine passende Antwort gefunden?

Fragen Sie die Community