Hallo eloose,
vielleicht war ich ein wenig zu ungenau.
Wie ich geschrieben habe bin ich auch dagegen die JavaScript Variante als alleiniges Mittel einzusetzen. Aber als Zusatz zu den anderen Möglichkeiten ist es vielleicht eine nützliche Erweiterung.
Die meisten mir bekannten Bots können kein JavaScript (da Sie häufig auf simpelste Weise erstellt werden z.B.: in PERL :))
Wenn du das Feld immer mit dem gleichen Wert füllst wird jemand der es auf dich abgesehen hat einmal den HTTP Header analysieren und wissen welche Daten du an den Server schickst. Daher geht meine Empfehlung zu einer dynamischen Variante die zum Beispiel die MD5 Summe von URL IP-Adresse und der aktuellen Stunde übermittelt.
Da es eben User gibt die JavaScript deaktiviert haben müssen wir zu dies zu einer Schwellwertlösung ausbauen. Das Prinzip ist das gleiche nach dem Antispam Tools für E-Mails arbeiten. Für verschiedene Kriterien werden Punkte vergeben (zum Beispiel pro Link in der E-Mail 5 Punkte, wohingegen dauerhaftes groß schreiben mit 25 Punkten Score gewertet wird). Jetzt wird ein Schwellwert festgelegt der zwischen Bot und Mensch entscheidet.
Ein gutes Beispiel bietet in meinen Augen wirklich das Wordpress Modul Spam Karma 2 (deswegen muß es auch nun als Beispiel herhalten):
Um einen Kommentar in einem von Spam Karma überwachten Blog abzugeben werden folgende Kriterien angelegt:
1. Anzahl Links
2. Zeit zwischen Betreten der Beitragsseite und des abgebens des Kommentars
3. Prüfung auf vorhandenes JavaScript
etc.
Intern werden für jeden nicht bestandenen Test Punkte vergeben. Überschreitet ein Kommentar eine gewisse Schwelle an Fehlerpunkten wird der Eintrag nicht zugelassen.
Zurück zu deinem Fall:
1. Prüfung: Hat der Benutzer etwas in ein Feld geschrieben das er gar nicht sehen kann ? - 5 Punkte
2. Prüfung: Hat der Benutzer kein JavaScript aktiviert? 5 Punkte
3. Prüfung: Hat der Benutzer die Rechenaufgabe falsch gelöst ? 5 Punkte
Schwellwert sei in unserem Fall nun 10. Hat der Benutzer zwei von 3 Tests nicht bestanden gehen wir davon aus, dass er ein Bot ist und wir verweigern Ihm die Registrierung - oder bieten Ihm zum Beispiel nochmals die Möglichkeit ein Captcha zu benutzen oder direkten Kontakt zu einem Admin aufzunehmen der seine Identität überprüft.
Dies in groben Zügen ist die Schwellwert Idee. Je mehr Tests du durchführst desto feiner kannst du mögliche Fehlerkennungen ausschliessen.
Kommen wir also zur CSS / DOM Frage:
1. Möglichkeit für die CSS Falle wäre folgende:
<input type="text" name="Adress" size="1" style="background-color:transparent;width:0px;height:0px;border:0px solid transparent;color:transparent;" value="" />
Möglicherweise würde ein intelligenter Spambot hier Lunte riechen und das Feld nicht ausfüllen.
Deshalb ist es sinnvoller, das CSS in eine externe Datei auszulagern (wie ja bereits schon erwähnt)
Das würde dann unter Umständen so aussehen:
<input type="text" name="Adress" size="1" class="invisible" value="" />
Ist auch nicht das gelbe vom Ei, da auch der nichtsnutzigste Spambot versteht was invisible heisst.
CSS bietet mir aber nun eine weitaus sicherere Möglichkeit: Da ich ja vorher weiss, an welcher Stelle des HTML Codes sich der versteckte Teil befinden wird kann ich mein CSS ja nach dem typischen Baumschema anlegen.
html.body.table.tr.td.input {
display: false;
}
Auf diese Weise müsste unser geliebter Spammer den ganzen Dokumentbaum durchforsten um herauszufinden an welcher Stelle denn nun so ein Objekt liegt.
Gruß
pacey
QuoteIf You don't know what it does, why do you put it in your code
print +(a=>b=>c=>d=>e=>f=>g=>h=>i=>j=>k=>l=>m=>n=>o=>p=>q=>r=>s=>t=>u=>v=>w=>x=>y=>z=>" ")
[9=>20=>18=>19=>-1=>0=>13=>14=>19=>7=>4=>17=>-1=>15=>4=>17=>11=>-1=>7=>0=>2=>10=>4=>17];