von | Blog, PHP

Wahrscheinlich kennt jeder Betreiber einer Internetseite mit Kontaktformular das Problem. Irgendwann wird das Formular von einem Spambot entdeckt und ab dem Moment finden sich regelmäßig sinnlose Anfragen im Mailpostfach.

Natürlich kann das automatische Ausfüllen und Absenden des Formulars mittels eines Captchas unterbunden oder zumindest erschwert werden, aber leider hat diese Methode zwei gravierende Nachteile:

  1. Nicht alle Captchas sind für die Bots ein unüberwindliches Hindernis, zudem werden sie inzwischen oftmals an echte Menschen weitergeleitet, die die Captchas für den Bot lösen.
  2. Die Methode behindert auch ernsthafte Anfragen, weil die Buchstaben/Zahlen auch für Menschen nur schwer zu erkennen sind und es einfach zu anstrengend sein kann, sich als potentieller Kunde mehrmals ein neues Bild anzeigen zu lassen.

Es gehen also möglicherweise echte Interessenten verloren.

Wie kann dieses Problem aber nun ohne Captchas gelöst werden?

Eine einfach zu realisierende Methode ist der “Honeypot”. Es wird einfach eines oder mehrere zusätzliche Felder HTML-Code implementiert, aber per CSS (in der css-Datei, nicht inline) mit display: none; für den menschlichen Besucher unsichbar gemacht. Ein Spambot findet die Felder trotzdem, kann aber deren Unsichtbarkeit nicht erkennen und wird sie mit hoher Wahrscheinlichkeit ausfüllen.

Bei der Auswertung der Formulars kann also eine Anfrage mit einem ausgefüllten Honeypot-Feld mit hoher Wahrscheinlichkeit als Spam qualifiziert werden.

So könnte das im HTML-Code aussehen:

<form>
 <select class="form-control" name="Anrede">
  <option value="">Anrede *</option>
  <option value="Frau">Frau</option>
  <option value="Herr">Herr</option>
 </select>
 <input class="form-control" name="Vorname" placeholder="Vorname *" value="" type="text" />
 <input class="form-control" name="Nachname" placeholder="Nachname *" value="" type="text" />
 <input class="form-control" name="Telefon" placeholder="Telefon *" value="" type="text" />
 <input class="form-control" name="Email" placeholder="E-Mail *" value="" type="text" />
 <input class="form-control wdh" name="EmailWdh" placeholder="E-Mail Wdh. *" value="" type="text" />
 <input class="btn" name="senden" value="Absenden" type="submit" />
</form>

Eigentlich handelt es sich hierbei um ein ganz normales Formular mit dem einzigen Unterscheid, dass das Feld EmailWdh in Zeile 11 die zusätzliche Klasse wdh bekommen hat. Dieser Klasse wird in den CSS-Definitionen einfach display: none; zugeordnet und das Feld ist unsichtbar. Da die meisten Bots in der Lage sind, die Bedeutung der Felder anhand der Namengebung zu erkennen, schreiben sie also eine Mailadresse in das Feld… Erwischt!

Danke für’s Lesen!

 

Kommentare sind geschlossen.