Jörg Marzinzick

Im Entenpfuhl 3
34630 Gilserberg
Handy: 0152 2752 4177
E-Mail: j.marzinzick@googlemail.com
joerg-marzinzick.de
html5 und css3 spielereien
Im Entenpfuhl 3 34630 Gilserberg
Geo-Tags
Prev 1. 1 ... ... 2 3 4 5 6 7 7. Next >>

Captcha

Ein Captcha (engl. Completely Automated Public Turing test to tell Computers and Humans Apart, also vollautomatischer öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen) wird verwendet, um festzustellen, ob ein Mensch oder eine Maschine (Roboter, kurz Bot) die Eingabe vornimmt. Quelle: Wikipedia

Die Erstellung eines Captchas hat mir anfangs reichlich Kopfzerbrechen beschert, bis ich mich schliesslich intensiver damit befasst habe. Das erste Problem ist die Erstellung des Bildes selbst, da es sich um eine eigene php-Datei ohne weiteren html-Code handeln muß, die mittels des html <img>-Tags aufgerufen wird. Für die Übergabe der darzustellenden Zeichen habe ich zunächst Session-Daten, dann Cookies verwendet, bis ich mich schlussendlich für die Übergabe per get über die url entschlossen habe. Insgesamt teile ich den Code auf drei Dateien auf, die rufende html/php-Datei, die das Captcha zeigt, die php-Datei mit dem Code für das Bild selbst und schliesslich eine php-Datei, die die Zufalls Funktion für die Bereitstellung der Zeichen enthält. Hier kann zwischen verschiedenen Zeichensätzen gewählt werden, Verwechselungsmöglichkeite wie bei "O" und "0" sind möglichst zu vermeiden. Hier einige Beispiele, die gut lesbar sind. Es geht mir nicht darum, die Grafiken immer ausgeklügelter zu machen, um auch den letzten Bot noch zu überlisten, sondern darum Masseneinträge zu verhindern und das klappt nach meinen Erfahrungen so sehr gut.

Captcha mit einfachem Hintergrund
Captcha mit Hintergrundbild

Zunächst also der Code der "rufenden" php/html-Datei. Die Besonderheit dabei ist, dass der Aufruf der Bild-Datei mit dem in einer Variablen gespeichrten Captcha-Code innerhalb eines img-Tags erfolgt. Der Captcha Code selbst wird per get über die url übergeben. Wird das Captcha in ein Formular integriert, muss noch unterschieden werden, ob die Datei das erste Mal aufgerufen wird, oder das Formular schon einmal versandt wurde. Dazu wird der erzeugte Captcha Code in eine Text-Datei geschrieben.


				<?php
				include('captcha-advanced/captcha.php');
				$set_arr = CaptchaCode(5);
				$setArr = implode("", $set_arr);

				$wert = implode("", $set_arr);
				$logdatei = "captcha.dat";

				function capt($wert) {
					global $logdatei;
					if (file_exists($logdatei)) {
						$fp = fopen($logdatei,"w");
						fputs($fp, $wert);
						fclose($fp);
					}
					elseif (!file_exists($logdatei)) {
						$fp=fopen($logdatei,"w");
						fputs($fp, $wert);
						fclose($fp);
					}
				}
				capt($wert);
				?>
				<!DOCTYPE HTML>
				<html>
				<head>
					<meta charset="utf-8">
					<title>Captcha Advanced</title>

				<style>
				img {
					border: 10px solid rgba(241, 241, 241, 1.0);
					width: 250;
					height: 100;
					margin: 10px 0;
				}
				</style>
				</head>
				<body>
					<h2>Das ist mein erzeugtes Bild</h2>
					<img src="bild.php?wert=<?php echo $wert; ?>" />
					<br/>
					<?php echo $setArr; ?>
				</body>
				</html>
			

Die Funktion zur Erzeugung des Zufalls Codes ist in der Datei captcha.php gespeichert und befindet sich zusammen mit den ttf-Dateien im Unterverzeichnis captcha-advanced.


				function captchaCode($anz = 5) {
					$wertFeld = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
					$zeichen = array();
					for($lv=1;$lv<=$anz;$lv++) {
						$zeichen[$lv] = $wertFeld[rand(0, 35)];
					}
				return $zeichen;
				}
			

Und schliesslich die eigentliche php-Datei zur Erzeugung des Bildes bild.php In dieser Datei sollten nur die notwendigen php Befehle notiert sein, Ausgaben vor dem Header-Aufruf sind unzulässig!

			

Dazu kommen, wie schon erwähnt, die Dateien name.tff für die verwendeten Schriftarten, die Dateien bild.php und die "rufende "name.php liegen im Stammverzeichnis, alle anderen Dateien befinden sich im Verzeichnis captcha-advanced.

Prev 1. 1 ... ... 2 3 4 5 6 7 7. Next >>