Level: einfach

Die meisten Webformulare werden früher oder später von Spambots missbraucht. Dies kann mit einem einmaligen Prüfwert zwischen Formular und Verarbeitungs-Skript zumindest stark eingedämmt werden. Ziel dieser Übung ist es, das Prinzip anhand einer einfachen Rechenaufgabe kennenzulernen.

 

Vorbereitung

  1. Erstelle ein einfaches Kontaktformular wie hier beschrieben, oder verwende dieses, falls schon erstellt
  2. Starte als erstes im PHP Script eine Session mit session_start()

 

Aufgabe

  1. Erstelle zu Beginn zwei Zahlenvariablen ($a und $b), mit denen die Sicherheitsfrage rechnen soll. Die beiden Zahlenvariablen erhalten einen zufälligen Wert (random, siehe Funktion rand()...) zwischen 1 und 5. Die maximale Zahl sollte nicht allzu hoch sein, damit die Rechnung möglichst kein Hindernis darstellt, es muss jedoch nicht 5 sein.
  2. Erstelle nun eine weitere Variable für das Resultat, und speichere darin $a + $b.
  3. Erstelle einen Eintrag in der Session-Variable mit dem Namen "spamcheck" und dem Resultat als Wert
  4. Erstelle nun ein weiteres Formularfeld "spamcheck" mit dem Label "Sicherheitsfrage" für das Rechenresultat. Gebe dort die Frage aus: "was ist a plus b?", wobei für a und b natürlich die entsprechenden Zufallswerte ausgegeben werden sollen. Der Benutzer soll in das Formularfeld das Resultat hineinschreiben.
  5. Ermittle nun mittels IF/ELSE und der Abfrage der POST-Variable, ob das Formular schon abgeschickt wurde. Ist dies der Fall, kannst du nun vor jeder weiteren Validierung den Wert aus $_POST["spamcheck"] mit dem Wert $_SESSION["spamcheck"] vergleichen. Sind Sie nicht gleich, soll keine weitere Verarbeitung stattfinden, sondern eine Fehlermeldung und noch einmal das Formular angezeigt werden.

 

 calc spamschutz

 

Advanced

Du kannst dem Skript statt einem fixen Operator mehrere zur Auswahl geben. (Dividieren ist jedoch wegen der komplizierten Bruchzahlen eher nicht zu empfehlen!)

  1. Schreibe alle Operatoren in ein Array und alle ausgeschriebenen Versionen (also "plus" für +, "minus" für - etc.) in der selben Reihenfolge in ein weiteres Array.
  2. Wähle den Operator nun ebenfalls per Zufall (random index) aus - achte dabei darauf, dass die möglichen Random-Zahlen wirklich nur im Bereich der Indices der beiden Arrays liegen, indem du die Anzahl Elemente als Referenz nimmst.
  3. Verwende SWITCH/CASE, um für jeden Operator die Berechnung vorzunehmen.
    Achtung: auch wenn man dies mit eval() etwas kürzer schreiben könnte, ist es aus Sicherheitsgründen NICHT empfohlen!

 

Tipps

  1. Noch besser kann man Spambots an der Nase herumführen, wenn man das Formularfeld für den Spamcheck anders benennt als "spamcheck", um das Programm zu verleiten, etwas anderes einzutragen (zum Beispiel "phone", oder "birth_date" etc.).