Heinz-Jürgen Schymura

Captcha.php


Nachdem ich immer mal wieder Mails bekommen habe, wo sich Besucher meiner Webseiten, sei es, die Software oder auch die Wanderungen betreffend, bedankten, kam mir die Idee dass ich vielleicht auf meinen Webseiten ein Gästebuch einrichten sollte wo sich dann die Menschen direkt bedanken könnten.
Allerdings von mir klar,dass es sich nicht um ein einfaches Gästebuch handeln könnte wo dann jeder einfach schreiben könnte was er wollte, also auch irgendwelche Beleidigungen oder Hasspredigten oder so und ich dann hinterher dafür mein Kopf dafür hinhalten müsste. Es müsste also schon ein moderiertes Gästebuch sein, so dass die Einträge erst freigeschaltet werden, wenn sie für gut befunden worden sind. Das aber würde wiederum bedeuten, dass ich eventuell, wenn es ganz dumm käme, viel automatisch erzeugte Gästebucheintragungen zu löschen hätte. So war also klar das ich auf jeden Fall eine Absicherung gegen automatische Gästebucheintragungen haben musste. Ich brauchte also eine Grafik, in der beliebige Zeichen angezeigt werden konnten, die dann vor dem Senden der Eintragung für das Gästebuch von einem Menschen eingegeben werden mussten (Captcha).
Nun, es gibt im Internet genügend derartige Module. Sie erfüllen nur leider nicht unbedingt alle meine Erwartungen. Als größten Kritikpunkt empfinde ich, dass die vorhandenen Module, die ich fand, immer die IP Adresse nutzten um die vom Menschen eingegebene Zeichenfolge der auf der Webseite angezeigten Grafikzeichenfolge zuzuordnen.
Das hat zumindest zwei Nachteile: Erstens muss man mit einer (wie auch immer gearteten) Datenbank arbeiten und zweitens können niemals zwei oder mehr Benutzer mit der gleichen IP Adresse zur gleichen Zeit eine mit derartigem Captcha abgesicherte Seite bedienen. Und dies ist kein theoretisches Problem, denn immer mehr Haushalte mit mehreren Rechnern oder auch kleine Betriebe zeigen nach außen hin die gleiche IP Adresse ihres Routers.
Und dann gibt es natürlich auch noch die User, die Anonymisierungsdienste wie etwa JAP der Uni Dresden oder auch andere Anonymisier nutzen ohne gleich kriminelle Absichten zu haben, sondern einfach nur anonym und unbeobachtet im Internet surfen wollen.
Als beste Möglichkeit erschien mir, dass jede Webseite, die an einem Browser geschickt wird, in sich selbst verschlüsselt einen Wert der zufälligen Zeichenfolge, die für die Captchagrafik genutzt wurde, haben muss, so dass sie sie einfach zurückschicken kann, um dann auf dem Server prüfen zu können, ob die Eingabe der Zeichenfolge durch den User richtig ist.
Dieses Zurückschicken an den Server wäre über eine einfache HTML-Eingabeform zu realisiert. Und auf dem Server könnte dann das PHP-Programm prüfen, ob die Eingabe richtig, indem es die übermittelte Usereingabe in der gleichen Art verschlüsselt und dann prüft, ob beide Werte identisch sind. In Abhängigkeit des Ergebnisses der Prüfung sollten dann die unterschiedlichsten Aktionen möglich sein.
Wie normal bei meinen PHP-Programmen sollte Captcha.php über eine Konfigurationsdatei an die eigenen Wünsche anpassbar sein, ohne auch nur ein Zeichen in Captcha.php ändern zu müssen.
Bei
Außerdem kann die Länge der zufällig erzeugte Zeichenfolge festgelegt werden und die Zeichen, die für die Erzeugung der Zeichenfolge genutzt werden sollen und dann auch noch die Breite und die Höhe der zu erzeugenden Captchagrafik.

Mit einer eingestellten Zeichenlänge von 6 Zeichen könnte es in etwa so aussehen.
 
Beispiel einer Captcha Grafik

Zu wirr? Es geht auch anders.

Beispiel einer Captcha Grafik

Auch der Winkel, bis zu der die einzelnen Zeichen gedreht werden dürfen, ist einstellbar.

Beispiel einer Captcha Grafik

So in etwa könnte es aussehen, wenn man einstellt, dass das Programm zufällige Formen in die Grafik zeichnen soll und natürlich auch die Anzahl der zufälligen Formen.

Beispiel einer Captcha Grafik

Für zufällige Linien in der Grafik gilt das gleiche.

Beispiel einer Captcha Grafik

Dann gibt es noch die Möglichkeit, zufällige Ausschnitte (Kreise) zu verdrehen, was zu Verzerrungen führt. Auch hier ist die Anzahl, der Durchmesser und der Verdrehwinkel der Ausschnitte einstellbar.

Beispiel einer Captcha Grafik

Alles zusammen könnte dann so aussehen.
 
Sie haben vermutlich festgestellt, dass die Farben der Zeichen, der Linien und der Formen auch zufällig sind.
Auch der Hintergrund der Captchagrafik ist einstellbar, dafür jedoch gebe ich hier keine Bildbeispiele.

Aber eine mögliche Anwendung will ich hier noch zeigen.

Beispiel einer Captcha Grafik in einer HTML-Eingabeform

Wenn ich dann alle Eingaben gemacht habe, aber, wie im Beispiel, ein falsches Zeichen, besser gesagt ein Zeichen zu wenig eingebe, 

Beispiel einer Captcha Grafik in einer HTML-Eingabeform

dann erhalte ich die Eingabeseite mit neuer Captchagrafik zurück.

Beispiel einer Captcha Grafik in einer HTML-Eingabeform

Dadurch, dass ich in der Konfigurationsdatei Captcha.php für die unterschiedlichen Ergebnisse der Prüfung der Usereingabe verschiedene PHP-Programme festlegen kann, kann ich bei einem derartigen Fehler die bereits gemachten Angaben in den anderen Eingabefeldern einfach wieder setzen, so dass ich den Benutzer nicht verärgere, sondern er nur die Zeichen der neuen Captchagrafik eingeben muss.

Wenn die Prüfung der Prüfung der Besuchereingabe positiv ausfällt, dann könnte ich in etwa solche Webseite an den Besucher senden.

Beispiel einer Captcha Grafik in einer HTML-Eingabeform

Aber natürlich kann ich auch darauf bestehen, dass der Besucher zumindest bei Bemerkungen eine Eingabe macht und ansonsten zum Beispiel mit nachfolgend gezeigter Webseite abgewatscht wird.

Beispiel einer Captcha Grafik in einer HTML-Eingabeform
 
Eine HTML-Eingabeform müssen Sie sich jedoch selbst erstellen. Nur so ist eine vollständige Anpassung an Ihre Bedürfnisse möglich. Sie können alle zulässigen Eingabe- oder Auswahl-Objekte darin nutzen, denn Sie selbst schreiben dann ja die PHP-Programme, die entsprechend der Prüfung der Besuchereingabe ausgeführt werden sollen. So können Sie die Daten, wenn notwendig in einer Datenbank (für ein Forum etwa) unterbringen, eine Dateiupload oder Dateidownload veranlassen, oder was auch immer Sie wollen.
(Falls Sie sich erst in PHP einarbeiten wollen, oder wenn Sie mal für einen Befehl die exakte Syntax brauchen, so ist dieses PHP-Manual sehr zu empfehlen.)

Wichtig ist jedoch, dass Sie in der HTML-Eingabeform ein Input-Objekt beliebigen, aber in der HTML-Eingabeform einzigartigem, Namens als hidden festlegen und diesen Namen dann in der Konfigurationsdatei von Captcha.php an entsprechender Stelle eintragen. In dieses, in der HTML-Eingabeform, nicht sichtbare  Input-Objekt schreibt  dann Captcha.php immer bei der an den Besucher gesendeten Webseite den verschlüsselten Wert, der aus der zufällig erzeugten Zeichenfolge für die Captchagrafik erzeugt wurde.
Auch für das Input-Objekt, in dem der Besucher die Zeichenfolge eingeben soll müssen Sie in der Konfigurationsdatei den entsprechenden Namen angeben.
Detaillierte Informationen können Sie unter dem Menüpunkt Hilfe Captcha.php finden.

Ach ja, die Idee in meinen Webseiten Gästebücher anzubieten habe ich (erst einmal) fallen gelassen.