Spamschutz für Formulare: Honeypot statt Captcha
Fast jede Webseite besitzt Web-Formulare. Meistens sind es Kontaktformulare, welche nur Mails versenden. Häufig werden aber auch Formulare für Registrierung, Bestellung, Gästebuch usw. verwendet, welche nicht nur Mails versenden, sondern auch noch Einträge in der Datenbank machen.
Irgendwann wird man plötzlich mit Mails von der eigenen Webseite überschüttet. Es sind Spam-Mails welche über irgendein Formular der Webseite (z. B. Kontaktformular) versendet werden. Dagegen gibt es verschiedene Mittel. Am besten: Die Honigfalle!
CAPTCHA Codes
Oft sieht man auf anderen Webseiten unterhalb der Formulare einen sog. CAPTCHA-Code, den man von einem Bild ablesen und eintippen muss. Diese Spamschutz-Maßnahme wird häufig verwendet und bietet auch einen einigermaßen guten Schutz. (Obwohl es manche Spamprogramme auch schaffen, die Zeichen aus dem Bild auszulesen)
Nachteile der CAPTCHA Codes: Es ist einfach lästig, immer diesen Code eingeben zu müssen. Außerdem ist der Code manchmal schlecht zu lesen. Diese Methode gilt daher nicht als „barrierefrei“.
Es gibt noch eine ähnliche Methode mit Rechenaufgaben, aber auch diese werden von den Spambots teilweise schon gelöst und der Benutzer ist auch hier gezwungen eine zusätzliche, lästige Eingabe zu machen, selbst wenn es nur ein Zeichen ist.
Deshalb möchte ich eine andere, einfache und sehr elegante Methode vorstellen, die schon seit längerem bekannt ist und auch erfolgreich angewendet wird.
Honeypot Methode
Die Methode heißt „Honeypot“ (Honigtopf) und ist sozusagen eine süße, verlockende Falle für die Spambots.
Diese haben nämlich die Angewohnheit, alle Eingabefelder auszufüllen, die sie finden können.
Die Spambots können da einfach nicht widerstehen.
Der Trick geht wie folgt:
Man erstellt einfach ein zusätzliches Eingabefeld mit dem Hinweis, dass dieses Feld leer bleiben soll, da es eine Spamschutz-Maßnahme ist.
Besucher der Webseite wissen dann Bescheid und es ist bequemer ein Feld einfach leer zu lassen, statt einen Code aus einem Bild zu entziffern und einzutippen.
Dieses zusätzliche Feld kann man mit CSS auch unsichtbar machen (Display: none;), sodass die Besucher nichts davon mitbekommen.
Die Spambots aber tappen prompt in die Falle und füllen das Feld aus (auch wenn es unsichtbar ist).
Nun wird in der Programmierung (PHP) noch die Bedingung eingesetzt, dass das Formular erst verarbeitet wird, wenn dieses Feld leer ist. Und schon hat man einen einfachen, sehr effektiven und barrierefreien Spamschutz. Der Honigfalle sei Dank!
Für Programmierer sollte es selbstverständlich sein, dass darüber hinaus sämtliche Eingabevariablen (POST und GET) immer vor der Weiterverarbeitung gefiltert und geprüft werden müssen, um Spam oder SQL-Injection (Manipulation der Datenbank) zu vermeiden. Dazu gibt es in PHP zahlreiche Funktionen.
Diese Methode des Spamschutzes kannte ich noch garnicht. Danke für den Tipp! 🙂
Wobei die Idee mit dem Timestamp auch ziehmlich gut klingt.
… das schreit ja förmlich nach einer Testreihe 😉
hallo, ich nutze eine weitere variante, um spam zu vermeiden: ich setze ebenfalls ein verstecktes formularfeld ein. in dieses wird beim seitenaufbau per php ein timestamp gesetzt. nach absenden des formulares prüfe ich die differenz zwischen dem time() des absendens und dem timestamp. sollte hier eine gewisse zeit (in sekunden) unterschritten sein, kann mit sicherheit von einem spam-bot ausgegangen werden, da kein wirklicher user so schnell tippen und senden kann 😉
Hallo Patrick,
danke für Deinen wertvollen Beitrag. Das ist auch ein sehr schöner Trick.
Auch deshalb, weil es auch bei deaktiviertem JavaScript funktioniert. Viele Wege führen nach Rom. Bin gespannt ob noch mehr Leser zu dieser Seite finden. Denn dieser Beitrag ist in den Suchmaschinen unter den relevanten Suchbegriffen sehr gut gelistet. (Unter „honeypot captcha“ und „spamschutz honeypot“ auf Platz 1)
Das Thema ist eben immer aktuell.
Ich freue mich auf weitere Beiträge 🙂
Also, die Captchas finde ich auch sehr benutzerfeindlich. Sind sie zu gut lesbar, werden sie auch ganz gut von Spambots entziffert, und sind sie schwieriger, hat man oft auch als Mensch Probleme, die richtigen Zeichen zu erkennen. Nach zwei Fehlversuchen spätestens bin ich jedenfalls ziemlich genervt.
Die Honeypots werden leider noch selten als Plugin angeboten, daher habe ich noch keine Erfahrungen damit machen können. Spambee ist super, das stimmt, und es wendet ja gleich mehrere Methoden an, aber das gibt es meines Wissens nur für WordPress.
Eine weitere Möglichkeit ist es, eine Frage zu stellen, am besten in deutsch, falls man eine rein deutschsprachige Website hat. Dann werden neben den Bots auch diejenigen menschlichen Spammer abgeblockt, die der deutschen Sprache nicht mächtig sind. Der Benutzer muss dann zwar die Antwort eintippen, aber das ist nicht so lästig wie ein schwer lesbares Captcha. Rechenaufgaben hingegen werden wohl inzwischen auch schon zu leicht von den Bots gelöst und von menschlichen Spammern natürlich auch, egal aus welchem Land.
Noch eine Lösung gibt es manchmal als Plugin: Der Benutzer muss ein Häkchen in ein Feld setzen. Das Feld wird per JavaScript erzeugt, die Spambots können das nicht erkennen, setzen also kein Häkchen hinein und schon sind sie entlarvt.
@Torsten
Vielen Dank für Deine wertvollen Tipps.
Ja, Captchas können schon nerven, z.B. bei Denic.de. (Die durchlöcherten Buchstaben gehen mir schon ziemlich auf den Wecker)
Das mit JavaScript ist ein gute Lösung. Einziger Beigeschmack: Wenn Benutzer JavaScript deaktiviert haben geht es nicht. Klar, dass da ein entsprechender Hinweis im NOSCRIPT Tag rein muss.
Aber die perfekte Lösung gibt es wohl nicht. Am besten man kombiniert verschiedene Methoden und muss auch bereit sein kleine Kompromisse einzugehen im ewigen Kampf gegen Spam.
Vielen Dank für den Kommentar 😉
Ja es stimmt, es ist nunmal ein ewiges Wettrüsten zwischen den Entwicklern von Spambots und Anti-Spam Maßnahmen. Einen 100%igen Schutz gibt es ohnehin nicht.
Die Methode verringert zumindest das Spamaufkommen, denn nicht alle Spambots sind so schlau.
Dieser Blog verwendet im Übrigen ein Plugin namens Antispam Bee welches nach demselben Prinzip funktioniert und erfolgreich Spamkommentare blockt.
Leider verhindern Honey Pots nur sehr eingeschränkt Spam. Wird ein herkömmliches CAPTCHA durch einen Honey Pot ersetzt kann sich das Spamaufkommen erhöhen. Dies ist zumindest meine Erfahrung im praktischen Einsatz.
Natürlich haben auch die Entwickler solcher Spambots längst dieses Problem erkannt.
Die Bots füllen einfach nicht jedes Feld aus, sondern agieren auf dem Zufallsprinzip. Genügend Versuche führen dann zu genügend viel Spam.