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.
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.
genial einfach; einfach genial. danke.
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.
Den php-Code füge ich einfach in die wp-comments-post.php ein, richtig?
@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.
Also reicht es nicht, wenn ich HTML-, CSS-Code in mein Theme einbinde und den PHP-Code in die WordPress-Datei?
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.
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 Namenauthoroderurlaus.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
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.
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.
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
Ich frage mich gerade, ob diese Mehode noch "aktuell" ist. Also ein Jahr später....
Und ich frage mich auch noch, ob es denn nicht noch sinnvoller wäre das versteckte Feld per javascript mit einem gewissen Wert zu füllen bei onlick auf den submit Button.
Weil der Bot drückt ja nicht auf den Button, sondern schickt ja nur einen Request, oder was meinst ihr dazu?
Grüße
Matthias
@Matthias: Die JS-Lösung ist definitiv besser, nutze ich auch in einem Plugin für WordPress.
Hi Frank,
öhm, welche JS-Lösung meinst Du?
Ein Plugin ist sinnlos für mich, weil ich diesen Schutz in eine "Nicht-Wordpress" Seite einbauen will.
Grüße
und danke..
Matthias
@Matthias: Ich prüfe, ob der User per JS kommt, wenn nicht, dann muss ein Fedl mit einem vorgegebenen Text ausgefüllt werden. Der Inhalt wird aus einem Array heraus befüllt, per Zufall. User mit deaktivem JS müssen also das Feld ausfüllen, alle anderen bekommen es durch JS ausgefüllt. Spamer kommen ohne aktives JS und müssen das Feld ausfüllen, dafür durchsuchen sie den Code. Daher zerpflücke ich noch das Wort in mehrere Teile und der User ohne JS bekommt es nur zusammen gezeigt.
Das Pugin heist JS Antispam, haben auch schon andere User genutzt und für nicht WordPress-Seiten umgebaut.