Spamschutz für Formulare ohne Captcha

von Axel von Leitner am 5.8.2014
Viele Webseiten versuchen mit Hilfe von Zeichenfeldern zum Abschreiben, sogenannten Captchas (Completely Automated Public Turing test to tell Computers and Humans Apart), die Spambots auszusortieren. Jeder hasst die immer unlesbaren und unverständlichen Captcha Felder, bei denen man selbst als Mensch häufig mehrere Anläufe benötigt. Ein Captcha war für uns deshalb keine Option. Wir hatten ein paar Ideen, wollten aber zunächst einmal ganz ohne speziellen Spam-Schutz starten, um zu sehen wie groß die Flut überhaupt wird. 

Formular ohne Spamschutz?

Im ersten Versuch ging unser Kommentar Formular also ohne besonderen Schutz online. Ein einfaches Formular mit Name, E-Mail Adresse und Kommentarfeld. Das Ergebnis war ernüchternd: Am nächsten Tag war der Blog voll mit Spam-Kommentaren. 
Also gut, die erste Runde ging an die Bots. Im zweiten Versuch erweiterten wir das Formular um ein zusätzliches Textfeld, welches wir versteckten. Die Idee dahinter ist einfach: Der Bot kann nicht unterscheiden, welche Felder sichtbar und welche unsichtbar sind. Er wird auch in das für Menschen nicht sichtbare Feld hinein schreiben, ein Mensch jedoch nicht. Diese versteckten Felder nur für Bots nennt man Honeypots (Honigtöpfe), von denen die Bots die Finger nicht lassen können. Wenn also das versteckte Feld ausgefüllt wird, schicken wir den Bot weg und verwerfen den Kommentar. 

Das Ergebnis? Weniger Spam-Kommentare, aber wir waren noch weit weg von spamfrei. 
In der nächsten Iteration wollten wir darauf wetten, dass die (meisten) Bots kein JavaScript können. Wir haben das Formular zunächst als disabled in die Seite gerendert. Es wird dann erst beim Klick auf den Link zum Verfassen eines neuen Kommentars aktiviert. 

So sieht der Link vor der Aktivierung aus...
Trotzdem, noch immer hatten wir über Tage hinweg einzelne Spam-Kommentare. Unsere Vermutung war, dass einige Bots es schlicht mit Trial and Error schaffen, durch zu kommen. Wir waren und sind noch immer skeptisch, dass man Bots mit Sessions, Cookies oder IP-Blockern wirklich habhaft werden kann, aber auch damit haben wir es versucht. 
Zum einen setzen wir Session-Variablen, wenn wir denken, es handelt sich um einen Bot. Sobald die Session-Variable gesetzt ist, verwerfen wir alle weiteren Kommentarversuche dieses Besuchers. Die Sperrung spezieller IPs haben wir auch einmal kurz ausprobiert, dann aber relativ schnell wieder raus genommen weil sie keinen großen Effekt brachte und wir nicht unnötig IPs sammeln wollten. 

Der finale Trick zum Spamschutz

Wir haben viel probiert und ganz zum Schluss haben wir unser display: none im CSS einer umliegenden Klasse des Fake content Eingabefeldes ersetzt gegen eine minimale Höhe. Das Feld wird also jetzt nicht mehr ganz ausgeblendet, sondern hat eine minimale Höhe. Es ist damit für Menschen noch immer nicht sichtbar, Bots denken aber offenbar es wäre ein normales Feld. Bislang fallen alle Bots darauf rein, schreiben in das Feld und wir verwerfen den Inhalt. 
Seitdem sind wir spamfrei und müssen uns nicht tagein tagaus über Spam-Kommentare, ungültige Anmeldeversuche und mehr ärgern - so wie zuvor bei dem Standard Wordpress Blog auf dessen URL- und Formularstruktur die Bots natürlich trainiert sind. 

Hier noch einmal die Auflistung der Maßnahmen, die bei uns bislang für absolute Spam-Freiheit sorgen: 
  • Honeypot-Feld für die Bots. Allein das Eingabefeld selbst hidden zu setzen, reichte bei uns nicht. Am besten klappt es, ein umliegendes Element auf eine Höhe von 0.5px zu setzen.
  • Das Honeypot-Feld hat den Namen content, das richtige Feld für Menschen heißt bot_protect.
  • Formular zunächst deaktivieren und erst bei Klick auf “neuen Kommentar” aktivieren.
  • Sessionvariable bei erster Fehleingabe setzen, um Trial-and-Error des Bots zu verhindern.
Mal davon abgesehen, dass es Spaß macht gegen die Bots zu kämpfen, haben wir mit relativ wenig Aufwand eine spamfreie Kommentarfunktion geschaffen, ohne dass wir die Nutzer zu irgendeiner Eingabe oder Rechnung zwingen müssen. Das klappt natürlich nicht mehr, wenn die Spammer sich mit dem speziellen Formular beschäftigen und den Bot darauf trainieren. Bei 99,9% der Webseiten und Formulare ist das aber nicht der Fall. 
Ich freue mich über eure Erfahrungen oder Lösungen zum Spamschutz in den Kommentaren. Wie haltet ihr euch die Spambots vom Hals?
LinkedInFacebook

Axel von Leitner

Mitbegründer von 42he. Beschäftigt sich mit den betriebswirtschaftlichen Dingen und steckt viel Herzblut in Design & Usability. Axel schreibt insbesondere über Produktivität, Design und Startup-Themen.