Sicherheitsbilder (Captchas) gegen SPAM
Auf dieser Seite erkläre ich mal, wie ich das "SPAM Problem" auf meiner Page gelöst habe. Dabei handelt es sich um ein Captcha, welches Matheaufgaben anzeigt. Diese muss man ausrechnen, und in das Eingabefeld eingeben.
Der Aufruf
Alle Funktionen des Captchas sind in einer Klasse zusammen gelasst. Alles in allem, besteht das Captcha aus zwei Teilen.
Einmal eine einzelne PHP Datei, die das Captcha aufruft, und zwei Methoden, die zum einen das Captcha in ein Formular einbindet, und zum anderen den eingegebenen Wert mit der Lösung vergleicht.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | include_once('captcha.class.php'); // Einbinden der Klasse $cc = new captcha('right'); // Erstellen einer Instanz // Werte checken if(isset($_POST['send'])) { if($cc->checkValue($_POST['captcha'], $_POST['captcha_token'])) { echo "Captcha richtig eingegeben!"; } else { echo "Captcha falsch eingegeben!"; } } // Formular echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>"; $token = $cc->getToken(); echo "<input type='hidden' name='captcha_token' value='".$token."'>"; echo "<img src='captcha.php?token=".$token."'>"; echo "<input type='text' name='captcha'>"; echo "<input type='submit' name='send' value='Checken'>"; echo "</form>"; |
Im oberen Beispielcode wird gezeigt, wie man das Captcha einbindet. Beim initialisieren der Instanz in Zeile3, wird die Ausrichtung der "=" Zeichens übergeben. Je nach dem, ob man "left" oder "right" angibt, ist das Zeichen links oder rechts.
Um das Captcha im Formular anzeigen zu lassen, wird innerhalb der <form>-Tags eine PHP Datei als Bild eingebunden. Dieser PHP Datei muss ein token übergeben werden. Mit diesem token, welches vorher mit der Methode $cc->getToken() erstellt wurde, wird das Ergebnis der Aufgabe in der Datenbank identifiziert.
Das token wird Gleichzeitig mit einem hidden-Feld im Formular mitgeführt. Das token wird beim check ob das eingegebene Ergebis richtig ist benötigt.
Nach dem absenden des Formulars, werden die eingegebenen Werte überprüft. Dies geschiet mit der Methode $cc->checkValue(). Der wird zum einen das eingegebene Ergebnis und zum anderen das token übergeben. Falls die Eingaben dann richtig sind, gibt die Methode true zurück, falls nicht, false.
Für weitere Erläuterungen, schau dir die nachfolgenden Seiten an.




