Captchas bieten Hilfe gegen Spam – Als Seitenbetreiber kennt man es, wenn man ein Kontakt-Formular oder ähnliches hat, dass nach einer Weile Spam-Bots auf die Seite gelangen. Diese Bots tragen meist irgendwelche Daten in das Formular ein, probieren Sicherheitslücken zu finden oder wollen einfach Website-Links spamen. Um das zu unterbinden bieten verschiedene Dienstleister Captchas an. Diese kleinen Felder sollen Website-Formulare vor Bots schützen.
Das Google Captcha ist eines der beliebtesten. Dieses ermöglicht es dem Besucher besonders leicht sich als Menschen zu verifizieren. Dies geschieht entweder mit einem einzelnen Klick oder sogar unsichtbar im Hintergrund. Um den Google Captcha Spam-Schutz für Formulare nutzen zu können, wird ein Google-Konto benötigt, danach besucht man folgende Seite:
Dort registriert man eine Webseiten, für die dieses Captcha gelten soll. Danach bekommt man ein Javascript, welches im Header verlinkt werden muss und einen HTML-Block in welchem später das Captcha platziert wird. Wenn man das gemacht hat, dann ist die Frontend Arbeit schon fertig. Interessanter wird die Validierung vom Server. Der Server dem die Formulardaten gesendet werden, muss den Wert des Captcha-Feldes an Google senden. Es gibt dann eine Antwort, ob die Validierung erfolgreich war oder nicht.
Ich habe dafür drei Funktionen geschrieben, die aufeinander aufbauen – man braucht jedoch nur die erste: handle_google_captcha( ‚SECRET_KEY‘, ‚CAPTCHA_VALUE‘ ) . Die Funktion gibt ein Array zurück auf dem im Key ’success‘ als BOOL ein TRUE oder FALSE gespeichert ist. Je nachdem ob die Captcha Validierung erfolgreich war, oder eben nicht. Sollte die Kontrolle Fehlschlagen liegt auf einem zweiten Key ‚errors‘ alle Fehlermeldungen als HTML-String mit einem <ul>-Tag.
In dem ersten Code-Block sieht man eine vereinfachte beispielhafte Anwendung. Zu erst die wichtigsten Variablen klären:
- $captcha_secret – Hier den Secret-Key aus der Google Admin Seite eintragen
- $captcha_value – ist der Input-Wert des Captchas
- $is_captcha_valid – sollte per Default false sein
Im nächsten IF-Block wird ausgelöst, falls es ein Captcha mit übertragen wurde (Ansonsten hat der User das Formular noch gar nicht abgeschickt) und man bekommt alle Rückgaben an das PHP. Danach muss man nur noch überprüfen ob Google grünes Licht gibt oder nicht. Falls alles passt, kann man die restlichen Daten auswerten und das Formular versenden. Sollte es nicht passen wird eine Fehlermeldung ausgegeben.