Die meisten, die schon mal ein Gästebuch betrieben haben, kennen das Problem:
Spam
Aber was kann man dagegen tun?
Ich möchte euch einen kleinen Trick vorstellen, wie man ohne viel Aufwand ein gesendetes Formular darauf prüfen kann, ob es von einem Bot ausgefüllt worden ist.
Die Theorie
Man fügt einem bestehenden Formular ein weiteres Feld zu, das man so formatiert, dass es für einen Benutzer unmöglich ist dieses zu erkennen und somit auszufüllen.
Im anschließendem Auswertungsskript prüft man nach ob dieses Feld auch wirklich leer ist.
Die meisten Bots füllen alle Feder aus um sicher zu stellen, dass alle Pflichtfelder einen Wert enthalten. Und das nutzen wir in diesem Fall aus.
Die Praxis
Fangen wir mit unserem HTML-Code an:
<form method="post" action="skript.php">
<input type="text" name="name" />
<div style="display: none;">
<!– Hier drin befindet sich das unsichtbare Feld –>
<input type="text" name="vorname" />
</div>
<input type="submit" name="sender" />
</form>
Nun zum PHP-Code:
<?php
if (!empty($_POST["vorname"])) {
// Abbrechen!
return false;
}
else {
// Daten auswerten…
}
?>
Wozu das DIV? Die Eigenschaft display lässt sich auch direkt anwenden.
Was ist mit Usern, die Alternativ-CSS verwenden?
Hallo gast42,
der DIV-Layer dient dazu dem Leser das Prinzip dieser Methode nahe zu legen – "Alles was da drin ist, kann man nicht sehen" – nicht alle Leser bringen die Vorkenntnisse mit, um dies sofort zu erkennen.
Die zwei Code-Schnipsel sollen nur die Idee dahinter vermitteln, nicht aber eine komplette Lösung darstellen!
Leider weiß ich nicht, was du bei deiner zweiten Frage genau wissen möchtest. Wenn du sie konkretisieren könntest, wäre ich bemüht auch diese zu beantworten.
MfG DaPascha
1. gibt es Browser, die mit display:none versteckte Felder nicht übertragen. Das PHP-Script müsste diesen Fall abfangen bevor es auf $_POST["vorname"] zugreift .
2. ohne CSS, bzw wie oben geschrieben, mit User-CSS (im Prinzip sind das Browsereinstellunegn, die das Seiten-CSS überschreiben) ist das Feld sichtbar, wird irgendwie ausgefüllt und führt zum PHP-Script-Abbruch.