Level: einfach

Dies ist eine Alternative zu bekannten Lösungen wie Google ReCaptcha. Sinn der Übung ist das Verständnis rund um Massnahmen zur Verhinderung von Spam. Es geht darum, anhand eines für Menschen nicht sichtbaren Feldes zu erkennen, ob ein Mensch oder Spambot das Formuar ausgefüllt hat. Da Spambots den Quellcode lesen und nicht die vom Browser gerenderte Darstellung, und so nur Spambots dieses Feld ausfüllen können, kann man diese so entlarven.

Die Übung baut auf dem Kontaktformular & Validierung auf. Du kannst aber natürlich diese Schritte in jedes beliebige Formular einbauen. Bereite dein Formular so vor, dass du dem Form-Tag das Attribut autocomplete="off" hinzufügst, um automatische Vorschläge des Browsers zu ignorieren, und so zu verhindern, dass unschuldige Personen in den Honigtopf treten.

Aufgabe

  1. erstelle ein Feld, welches einen Namen hat, der nicht auf seine Funktion schliessen lässt (z.B. homepage oder recommendation oder so etwas).
  2. Verstecke das Feld mit CSS, zum Beispiel mit position:absolute und einem negativen Wert für left, so dass es von Spambots immer noch als sichtbares Feld wahrgenommen wird
  3. Verarbeitung des Formulars: wird das Formular verschickt, muss dieses Feld leer sein, prüfe also im Validierungsteils des scripts mit empty(), ob das Feld leer ist. Gibt empty() true zurück, ist das Formular korrekt (von einem Mencshen) ausgefüllt worden.Diese Prüfung kann vor der Validierung der Felder stattfinden, da für einen Spambot möglichst wenige Ressourcen verbraucht werden sollten.
  4. Gibt empty false zurück, kann davon ausgegangen werden, dass ein Spambot zuwerke war. Eine Fehlermeldung ist sinnvoll, sie sollte jedoch nicht auf das Feld selbst hinweisen, da der Besucher das Feld nicht sieht, und Spambots keine Information über das korrekte Ausfüllen erhalten sollen.