© saicle/Shutterstock.com
Drei gegen Spam in Gästebüchern, Kommentaren und Co.

Zutritt für Spam verboten!


Unsichtbare Eingabefelder, Bayes-Filter und CAPTCHAs: Um Spam zu erkennen, gibt es verschiedene Ansätze, die jeweils Vor- und Nachteile haben. Dieser Artikel zeigt die Tricks, um Spam-Bots zu entlarven.

Bei der sicheren Entwicklung des Gästebuchs im PHP Magazin 1.2012 ist ein Problem offen geblieben: Das Erkennen von Spam. Diese Lücke wollen wir jetzt schließen. Dazu gibt es verschiedene Ansätze, die alle Vor- und Nachteile haben. Los geht es mit einem recht einfachen Trick, mit dem sich die meisten Spam-Bots erkennen lassen. Werfen wir aber zuerst einmal einen Blick auf die Arbeitsweise eines Spam-Bots.

Spam-Bots auf die Finger geschaut

Ein Spam-Bot macht erst mal das Gleiche wie ein Suchmaschinen-Bot: Er analysiert Webseiten und sammelt alle Links zu weiteren Seiten. Während sich der Suchmaschinen-Bot aber außerdem die Inhalte ansieht, untersucht der Spam-Bot die auf der Seite enthaltenen Formulare. Erfüllt ein Formular bestimmte Anforderungen, wird es ausgefüllt und abgeschickt. Ein Bot, der Kommentare mit Spam füllen soll, sucht also gezielt nach Formularen mit den für Kommentare gebräuchlichen Feldern wie Name, E-Mail-Adresse, Link zur Homepage und Kommentar.

Honig für den Spam-Bot

Nun ist ein Spam-Bot im Allgemeinen recht simpel gestrickt; aufwändige Analysen der Seiten sind ja nicht nötig. Er muss nur zum Beispiel Kommentarformulare erkennen, mit den passenden Inhalten füllen und abschicken. Und genau an dieser Stelle kann man ansetzen. Betrachten Sie mal das Formular in Listing 1: Es gibt Eingabefelder mit den Namen name, email, homepage und text, in die der Spam-Bot seine vorgegebenen Daten einträgt. Gäbe es ein zusätzliches Feld, zum Beispiel mit dem Namen url oder mail, würde das ebenso gefüllt. Besonders einfache Spam-Bots würden sogar ein Feld mit dem Namen honeypot mit irgendetwas füllen, aber man muss ihnen ja nicht auf die Nase binden, dass sie gerade an derselben herumgeführt werden.

Listing 1

<form action="index.php" method="POST"> Name: <br> <input type="text" name="name" size="60" value=""> <br> E-Mail: <br> <input type="text" name="email" size="60" value=""> <br> Homepage: <br> <input type="text" name="homepage" size="60" value=""> <br> Kommentar: <br> <textarea name="text" rows="5" cols="45"></textarea> <br> <input type="submit" name="aktion" value="Eintragen"> </form>

Wie lässt sich dieses Verhalten des Spam-Bots ausnutzen, um ihn zu erkennen? Jetzt wird eine weitere Beschränkung der meisten Spam-Bots ausgenutzt: Sie kümmern sich nicht um die Darstellung der Seite; Style-Informationen interessieren sie nicht. Sie füllen jedes Feld aus, selbst wenn es unsichtbar ist. Und genau darin liegt der Trick. Enthält das Formular ein unsichtbares Feld mit einem für die Spam-Bots verlockenden Namen, wird es ausgefüllt. Da die Benutzer das Feld normalerweise nicht sehen, tragen sie auch nichts ein. Daraus folgt: Ist der zugehörige Parameter nicht leer, wurde das Formular von einem Spam-Bot ausgefüllt und abgeschickt und kann verworfen werden. Eine Möglichkeit für ein Formular mit einem unsichtbaren Eingabefeld zur Spam-Bot-Erkennung sehen Sie in Listing 2. Der Name honeypot für dieses Feld ist natürlich ein schlechtes Beispiel. Sie sollten einen plausiblen Name wie url oder Ähnliches wählen. Jetzt müssen Sie nur noch vor dem Eintragen prüfen, ob der Parameter honeypot leer ist, wie in Listing 3.

Listing 2

<form action="index.php" method="POST"> Name: <br> <input type="text" name="name" size="60" value=""> <br> E-Mail: <br> <input type="text" name="email" size="60" value=""> <br> Homepage: <br> <input type="text" name="homepage" size="60" value=""> <br> Kommentar: <br> <textarea name="text" rows="5" cols="45"></textarea> <br>  <input type="text" name="honeypot" style="display: none;"> <input type="submit" value="Eintragen"> </form>

Listing 3

if (!empty($_POST['honeypot'])) {  // vermutlich Spam-Bot erkannt } else {  // eintragen }

Der Nachteil dieser Version: Benutzer, deren Browser warum auch immer die Style-Informationen nicht auswerten, sehen das Formularfeld und werden zumindest verwirrt. Eventuell geben sie dort auch etwas ein, woraufhin ihr Eintrag als Spam erkannt und verworfen wird. Aber dem kann man ja abhelfen, indem man eine zusätzliche Erklärung gibt. Das kann beispielsweise wie in Listing 4 erfolgen, indem ein span-Tag mit unsichtbar machendem style-Attribut die Erklärung und das Honeypot-Feld einschließt.

Listing 4

<form action="index.php" method="POST"> Name: <br> <input type="text" name="name" size="60" value=""> <br> E-Mail: <br> <input type="text" name="email" size="60" value=""> <br> Homepage: <br> <input type="text" name="homepage" size="60" value=""> <br> Kommentar: <br> <textarea name="text" rows="5" cols="45"></textarea> <br>  <span style="display: none;">  Hier bitte nichts eingeben  <input type="text" name="honeypot">  </span> <input type="submit" value="Eintragen"> </form>

Unsichtbare Eingabefelder erkennen

Theoretisch können die Spammer diesen Spam-Schutz sehr einfach umgehen, die Spam-Bots müssten nur so angepasst werden, dass sie unsichtbare Formularfelder ignorieren. Das ist einfach, wenn das Formularfeld durch Angabe von type="hidden" unsichtbar gemacht wurde (und solche Felder werden von dem Spam-Bots tatsächlich teilweise ignoriert). Sobald aber Style Sheets beziehungsweise style-Attribute ins Spiel kommen, wird das Erkennen unsichtbarer Felder schwierig. Es ist gegebenenfalls kein Problem, einen Spam-Bot an eine einzelne, bekannte Methode zum Unsichtbarmachen der Formularfelder anzupassen. Um alle möglichen, auch unbekannten, Methoden zu erkennen, müsste der Spam-Bot jedoch zu viel Aufwand betreiben.

Vor- und Nachteil unsichtbarer Eingabefelder

Der Vorteil dieses Ansatzes zur Erkennung von Spam-Bots ist seine Barrierefreiheit. Entweder der Benutzer sieht das Honeypot-Feld gar nicht, oder er wird, zum Beispiel von einem Screenreader, vor dem Ausfüllen gewarnt. Der Nachteil, sofern es allgemein um Spam-Abwehr geht: Es werden nur Eingaben von auf die Falle hereinfallende Spam-Bots ausgefiltert. Manuell eingegebenes Spam sowie Spam von entsprechend angepassten Spam-Bots wird nicht erkannt. Tabelle 1 zeigt eine Übersicht der Vor- und Nachteile. Um auch manuell eingegebenes Spam barrierefrei auszufiltern, kann man die Eingaben analysieren und Spam mithilfe so genannter Bayes-Filter erkennen.

Vorteile

Nachteile

Barrierefrei

Schützen nur vor Spam-Bots, nicht vor manueller Eingabe

Problemlos mit anderen Systemen kombinierbar

Benötigt keine Session

Tabelle 1: Vor- und Nachteile von Bayes-Filtern

Bayes-Filter

Bayes-Filter zum Erkennen von Spam, ursprünglich in E-Mails, wurden erstmals 2002 von Paul Graham beschrieben [1] und 2003 verbessert [2]. Die Bayes-Filter bewerten den Inhalt von Texten und entscheiden auf Grund von Wahrscheinlichkeitswerten zwischen Spam und erwünschten Texten, genannt „Ham“. Der Bayes-Filter zerlegt einen Text in Worte. In der Trainingsphase wird der Text vom Benutzer als Spam oder Ham eingestuft und der Filter lernt dabei, wie oft ein Wort als „Spam“ beziehungsweise „Ham“ bewertet wurde. Bei der späteren Bewertung eines Texts wird die Anzahl der Spam-...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang