Vorwort
Der folgende Script erzeugt einen zufälligen Sicherheitscode aus Zahlen und Buchstaben.
Und so sieht das dann zum Beispiel aus:
Captcha-PHP-Script
Wie bei den anderen Scripts brauchen wir zuerst einen Ordner "CAPTCHA". In diesen kommen folgende Dateien:
captcha.php
XFILES.TTF
captcha.PNG
Die captcha.php besteht aus folgendem Script:
captcha.php
- Code: Alles auswählen
<?php
session_start();
unset($_SESSION['captcha_spam']);
function randomString($len) {
srand(date("s"));
$possible="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
$str="";
while(strlen($str)<$len) {
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}
$text=randomString(5);
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$_SESSION['captcha_spam'] = encrypt($text, '8t3479u97'); //Key sollte geändert werden
$_SESSION['captcha_spam'] = str_replace("=", "", $_SESSION['captcha_spam']);
header('Content-type: image/png');
$img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
$color = ImageColorAllocate($img, 255, 255, 0); //Farbe
$ttf = $_SERVER['Document_Root']."XFILES.TTF"; //Schriftart
$ttfsize = 25; //Schriftgrösse
$angle = rand(0,5);
$t_x = rand(5,30);
$t_y = 35;
imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
imagepng($img);
imagedestroy($img);
?>
XFILES.TTF
Die Schriftart x-files ist eine Freeware-Schriftart und mMn besser für ein Captcha geeignet als Arial, weil für Spambots schwerer lesbar. Ihr könnt sie hier downloaden.
Hintergrundbild
Das Hintergrundbild generiert ihr wie hier beschrieben.
Einbau ins Formular
Wie hier beschrieben.
Einbau ins Script
- Code: Alles auswählen
<?php
session_start();
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], '8t3479u97'); // key sollte ident sein mit captcha.php
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if(isset($_SESSION['captcha_spam']) AND $sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
//
//
//Hier kommt das ursprüngliche Script hin.
//
//
}
?>
Rob hat geschrieben:Der Einbau ins bestehende Script ist sehr einfach, es braucht nur eine if-Schleife um das bisherige Script, welche überprüft ob das Captcha das eingegeben wurde, dem generierten Captcha entspricht. Optional kann auch noch ein else Teil angefügt werden, welche den Fehler ausgibt, dass das Captcha falsch war.
Eine andere Möglichkeit, die IF-Abfrage zu gestalten, wäre:
if(isset($_SESSION['captcha_spam']) AND $sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
}
else
{
die ("Der Sicherheitscode ist falsch!");
}
und dann der ursprüngliche Script. Ist leichter einzubauen, weil die Wahrscheinlichkeit, daß man was falsch macht, geringer ist - aber dafür wird die Abarbeitung etwaiger anderer IFs im Script nicht mehr durchgeführt, weil die(); das Script komplett abbricht.
