Spam-Roboter ausschließen - ohne Bilderraten


Da ich gerade mal wieder ein Formular nicht bedient habe weil ich verzerrte und schlecht lesbare Buchstaben aus einem verrauschten Bild abschreiben sollte habe ich mir jetzt 10 Minuten Zeit genommen, um euch zu zeigen wie es besser geht.

Schritt 1, Beweis des Machbaren:
eine PHP-Datei eurer Wahl mit folgendem Inhalt:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<script type="text/javascript">
// document.write('<input type="hidden" name="robot" value="1" />');
document.write('<input type="hidden" name="norobot" value="1" />');
</script>
<input type="submit" />
</form>

<?php
if(!$_POST['robot'] && $_POST['norobot']){
echo 'norobot';
} else{
echo 'robot';
}
?>


Schritt 2, das Verständnis:
Wer Javascript aktiviert hat, der sendet die Variable norobots=1 an euch. Ein Roboter der kein JavaScript kann, teilt euch nicht mit, dass er kein Roboter ist. Wahrscheinlicher ist es aber, dass er es euch trotzdem mitteilt (er kann kein Javascript, sieht aber das Formular). Dann sendet er die Variable robot=1 sowie norobot=1 an euch.
Jeder* Browser ab Windows 3.1 beherrscht dieses kleine Javascript.

Schritt 3, die Praxis:
Ersetzt das Bilderraten durch diesen Kniff.

* Sollte es nicht so sein, werde ich es hier ergänzen.
geschrieben am 2007-05-18 20:22 von David in: Wissenswert



Trackback-URL: [deaktiviert]
(Nutzung von Trackbacks)

Kommentare / Trackbacks


von Martin (WWW) @ 2007-05-18 20:59
Dillo kann kein JavaScript, diverse Textbrowser wohl auch nicht und ich bin glücklicher NoScript-Nutzer :)

Das Problem sind eben Leute ohne JavaScript. Ein anderer Lösungsansatz ist die Rechenaufgabe, die seit einigen Tagen bei unblogbar eingesetzt wird und seit einiger Zeit schon bei René zu finden ist.

Der Erfolg ist "ok". Das Spamaufkommen wurde zumindest reduziert. Dies könnte man für den Benutzer durch JavaScript vereinfachen.
Beispielsweise ein verstecktes Feld über document.write() einfügen, in welchem das Ergebnis bereits steht. Im noscript-Tag könnte die Rechenaufgabe mit Lösungs-Inputfeld stehen.

Fraglich ist nur, ob Spam-Robots den JavaScript-Code nicht mittlerweile nach derartigem HTML-Code untersuchen können, leider bin ich nicht wirklich up to date.

Ich hab das Problem mit dem Referer gelöst.
Gästebuch und das Formular zum Eintragen ins Gästebuch sind zwei Seiten.
Wird das Formular über mein Gästebuch geöffnet, kann gepostet werden.

von Else (WWW) @ 2007-05-26 16:31
Der Referer kann aber einfach gelöscht oder deaktiviert werden. Und damit wirst du wiederum einige Benutzer aussperren. Da gefällt mir eine kleine Rechenaufgabe schon deutlich besser!

von Gast (WWW) @ 2007-06-03 10:41
ich musste mein gästebuch inzwischen trotz rechenaufgabe komplett sperren, da es anscheinend für bots lösbar war (obwohl ich den code dazu sogar selbst geschrieben habe)


Kommentar Schreiben Für diesen Beitrag sind Kommentare geschlossen.