Spam mit Hilfe von CSS bekämpfen

Formulare sind ein begehrtes Ziel für Spamer. Es gibt die unterschiedlichsten Methoden um diese Spamer fern zu halten oder zu filtern. Eine Möglichkeit ist die Integration eines zusätzlichen input-Feldes, welches bei aktivem JavaScript ausgeblendet wird. Dieses Feld übergibt einen Schlüssel. Besuchen Leser die Seite ohne JS, dann müssen sie diesen Schlüssel eingeben. Dies ist nicht so einfach für den Spamer, der auch ohne JS kommt, wenn man diverse Möglichkeiten ausschöpft. Diese Möglichkeit habe ich bereits erfolgreich im Einsatz und nähere Informationen kann man im Artikel „JS AntiSpam“ nachlesen.

Eine ähnliche simple Methode ist aber ebenfalls mit CSS möglich. Leider ist diese einfache und effektive Methode nicht von mir, sondern wurde hier lediglich verwirklicht. Die Idee stammt von modernblue.
Auch CSS lässt es zu, dass man Bereiche des HTML ausblenden kann - display: none;. Nun ist es so, dass Spamer an sich dumm sind und jedes Feld, welches sie in einem Formular antreffen, ausfüllen. Dies lässt sich ohne Probleme abfragen, in meinem Beispiel mittels PHP. Ist also das Feld gefüllt, so handelt es sich um einen Spamer und es werden keine weiteren Aufgaben abgearbeitet.
Damit nun der Besucher nicht extra eine Anleitung lesen muss, bevor er das Formular nutzen kann, blenden wir dieses input-Feld aus.

Demo

Die verwirklichte Idee kann man sich ansehen und den Code ebenfalls downloaden.

HTML, Formular

Das Formular bekommt also ein weites Feld:


<input name="spamcheck" class="spamcheck" type="text" />

Damit könnte ein einfaches Formular folgendermaßen aussehen.


<form method="post" action="MACH_WAS">  
<fieldset>
	<label>Name: </label><input name="name" type="text" /><br />
	<label>E-Mail: </label><input name="email" type="text" /><br />
	<label>Mitteilung: </label><input name="message" type="text" />

	<input name="spamcheck" class="spamcheck" type="text" /><br />

	<input type="hidden" name="process" value="gesendet" />
	<input value="Senden" type="submit" />
</fieldset>
</form>

CSS-Stylesheet

Mit Hilfe von CSS wird das Feld ausgeblendet, für menschliche Besucher nicht sichtbar.


.spamcheck {
display: none !important;
}

Weitere Informationen zum Code und Demo sind unter unter diesem Link zu finden.

20 Kommentare

  1. Die Idee, ein Feld per CSS auszublenden, ist herrlich einfach. Beim nächsten Formular werde ich das ausprobieren. Dann zeigt sich auch, ob das Formular von einem Bot ausgefüllt wird oder von einem Menschen.

    Menschliche Bots soll es nämlich angeblich auch geben, wollte mir jemand weismachen. So recht glauben kann ich es zwar nicht, aber das wird sich ja durch diese Methode zeigen.

  2. Wir hatten sowas mal in einem Gästebuch eingebaut, haben dann aber doch Spam erhalten. Wir haben das Gefühl, dass die Bots es erneut versuchen, wenn eine Fehlermeldung kommt und dann die Felder variieren.

  3. @Ben: wenn du es innerhalb von WordPress nutzen willst, dann ist das nicht so einfach, da die POST-Auswertung nicht innerhalb des Themes statt findet, dazu müsste du die Core-Dateien bearbeiten oder ein Plugin erstellen.

  4. Also reicht es nicht, wenn ich HTML-, CSS-Code in mein Theme einbinde und den PHP-Code in die WordPress-Datei?

  5. Nein, die Prüfung würde nicht stattfinden. Die findet mit Hilfe einer Datei in wp-includes statt. Ich hatte hier schon mal einen Artikel - Spamschutz durch eine zusätzliche Checkbox, das sollte dir helfen. Dann geht es.

  6. Noch besser funktioniert das ganze, wenn man die Felder umbennent also das Attribut name ändert und den Namen der Spamfalle in Autor ändert. Sichtbar ändert das nichts, doch Spambots füllen lieber die Felder mit Namen author oder url aus.

  7. Dass die Idee von modernblue (per CSS ausblenden) stammt, bezweifle ich. Er hat den Artikel dazu im Blog am 25.06. erstellt. Ich selbst nutze diese Möglichkeit in meinem Gästebuch bereits seit über einem Jahr 😉

  8. Das mag sein, aber meine Inspiration stammt von dort. Bist du mit der Lösung zufrieden?

    Ja, seit ich das eingebaut habe, ist Ruhe. Hatte ne Zeitlang mit bis zu 50 Spam-Einträgen am Tag zu kämpfen, so dass ich das GB irgendwann zeitweise abschalten musste, bis eine Lösung gefunden war. Auf Captcha wollte ich verzichten, da ich diese selbst nervig auf anderen Seiten finde. Und was ich nervig finde, baue ich sicher nicht in meine Seite ein.
    Dann kam mir die Idee, ein Feld mit dem Namen "message" einzubauen und dieses einfach mit CSS auszublenden. Wenn dieses jedoch ausgefüllt ist, wird der Eintrag ignoriert.
    Diese Lösung ist bei mir seit dem 09.06.2006 online und seitdem habe ich keinen Spam mehr durch Bots.

  9. Herzlichen Dank für die Info. Ich habe es in einem Projekt genutzt und mal sehen, wie sich die Lösung schlägt. Bisher bin ich eigentlich sehr zufrieden mit meiner JavaScript-Version.

  10. Die Idee mit dem ausgeblendetem Textfeld ist gut, leider wird es aber bei ausgeschaltetem CSS (diese Funktion können inzwischen die meisten Browser) sowie in textbasierten Browsern wie Lynx angezeigt.
    Auch sorgt meiner Meinung nach diese Variante für Verwirrung bei Menschen mit Behinderungen, die auf alternative Ausgabetechniken (Brailzeile oder Sprachsynthese) angewiesen sind 😉

  11. Pingback: Daisyspam

Kommentare sind geschlossen.