Sprung zum Inhalt

Webdesign nach Maß von webdesign weisshart

Mein Blog

RSS Feed AbonnementRSS 2.0 Feed

zum Archiv und den Kategorien

Spambots sind blöd

Mittwoch, 22. August 2007

… aber lästig. Sie spammen jedes, aber auch wirklich jedes Formularfeld zu, das sie irgendwo auf irgend einer Seite finden.
Es bleibt also nichts anderes übrig, als jedes Formular, welchem Zweck es auch dient, vor diesen maschinellen Idioten zu schützen.

Ich setze hierzu zwei verschiedene Methoden ein. Beide Methoden vermeiden den größten Nachteil der - leider - weitverbreiteten Captchas: Sie ermöglichen das korrekte Ausfüllen und Abschicken eines Formulars auch dann, wenn der Besucher nicht mit einem Adlerblick gesegnet ist.

Methode 1: Die Rechenaufgabe

Die Seite, die vom Formular aufgerufen wird (das kann auch die absendende Seite sein Stichwort: Affenformular), überprüft serverseitig ob die Rechenaufgabe richtig gelöst wurde.

Falls nein, kann hier nochmals ein Hinweis ausgegeben werden.
Jedenfalls wird das Formular nicht verarbeitet, was ja der Zweck der Sache war.

Methode 2: ein verstecktes, leeres Eingabefeld

Diese Methode macht sich den Umstand zunutze, dass Spambots, wie schon der Titel dieses Beitrags ausdrückt, dumm sind, und jedes Feld eines Formulars ausfüllen.
Der Trick besteht nun darin, ein zusätzliches Feld ins Formular einzufügen, das NICHT ausgefüllt werden darf.
<input class="versteckt" name="email" size="35" type="text" />

Damit menschliche Benutzer hier nichts eintragen, wird das Feld per CSS versteckt. Aber Achtung! Das Feld nicht als type="hidden" auszeichnen, und NICHT mit display:none oder visibility:hidden verstecken. So dumm sind die Bots dann doch nicht.
Richtig ist vielmehr, das Feld per CSS aus dem viewport zu verschieben.
Zum Beispiel mit diesen CSS Anweisungen:
.versteckt {
position:absolute;
left:-1000px;
top:-1000px;
width:0;
height:0;
overflow:hidden;
display:inline;
}

Dann noch ein Hinweis für Besucher, die das CSS nicht interpretieren (zum Beispiel Screenreader), und die das "versteckte" Feld dennoch zu sehen bekommen, dieses Feld nicht auszufüllen. Diese Anmerkung selbst wird natürlich auf die gleiche Weise vor sehenden Benutzern versteckt.

Falls nun das versteckte Feld dennoch ausgefüllt ist, wird die Bearbeitung des Formulars serverseitig verweigert.
Mit PHP könnte dies im einfachsten Fall so aussehen:
if ($_GET["email"] != "") exit;
______________________

Nachtrag 03.11.:
Wenn das so zu schützende Formular bereits länger online war, dann ist die Wahrscheinlichkeit groß. dass Spambots die Informationen über dieses Formular bereits gespeichert haben, und nicht erst die Seite spidern, um die Formulardaten zu sammeln. Sie werden also ihren Spam ohne das "versteckte" Input Feld abschicken, und obige Abfrage funktioniert nicht mehr.

Die PHP Auswertung wird also erweitert:
if (( !isset($_GET["email"])) || $_GET["email"] != "") {
echo '
<p>Das Feld nach dem Suchfeld muss leer bleiben, sonst funktioniert die Suche nicht.
<br />Bitte gehen Sie mit der Zurück-Funktion Ihres Browsers zurück zur Suchfunktion.</p>
';
exit;
}

Was passiert hier?
Das Feld "email" muss geGETed werden (das aber machen die Spambots mit alten Datenbeständen nicht), aber es muss leer sein (wenn die Seite neu gespidert wird, dann schreiben die Bots hier was rein).


Archiv:

Kategorien:

Creative Commons Lizenzvertrag
Alle Texte (nicht Bilder!) Creative Commons CC BY-NC-SA 3.0 DE