
Datum: 30.08.2009 (291x gelesen)
Name: Andreas / Webseite: http://www.devAS.de
=> zurück zur Übersicht
zu allererst erstellen wir 2 neue Dateien.
captcha_img.php
(diese Datei generiert das Bild)
Name: Andreas / Webseite: http://www.devAS.de
=> zurück zur Übersicht
Simples Captcha per Session
Wer kennt das nicht: Man hat ein Gästebuch und gerät damit dummerweise auf die Use-Liste eines Spammers. Per Script bekommt man dann schön regelmäßig den Müll ins Gästebuch. Um das ein klein wenig einzuschränken, kann man ein Captcha einbauen.
Das hier beschriebene Captcha ist so gehalten, dass es sehr vielseitig einsetzbar ist. So hab ich es zb hier in die Registrierung auf dem WSB eingebaut, aber auch auf dem Witzlicht.de - Gästebuch
Fängen wir also an und klären mal die Grundgeschichte.
Wir haben also ein Gästebuch und dazu ein Seite mit dem Eintrageformular ... nennen wir sie gb-eintragsformular.php. Eine weitere Seite, um den Eintrag in einer Datenbank zu speichern, brauchen wir ja auch noch .... nennen wir sie gb-datenbankeintrag.php
zu allererst erstellen wir 2 neue Dateien.
captcha_img.php
(diese Datei generiert das Bild)
<?PHP
require("captcha_options.php");
session_start();
if(!$_SESSION['captcha_string'])die();
header ("Content-type: image/png");
mt_srand((double)microtime()*1000000);
$string = $_SESSION['captcha_string'];
$font = 5;
$width = ImageFontWidth($font) * strlen($string)+20;
$height = ImageFontHeight($font)+10;
$im = @imagecreate ($width,$height);
$background_color = hex_to_rgb($code_gbcolor,$im);
$text_color = hex_to_rgb($code_textcolor,$im);
$bcolor = hex_to_rgb($code_punktcolor,$im);
for($i=0;$i<=$code_punkteanzahl;$i++){
mt_srand((double)microtime()*1000000);
$p_x1 = mt_rand(0,$width);
$p_y1 = mt_rand(0,$height);
$p_x2 = mt_rand(0,$width);
$p_y2 = mt_rand(0,$height);
imagesetpixel ( $im, $p_x1, $p_y1, $bcolor );
}
imagestring ($im, $font, 10, 5, $string, $text_color);
imagepng ($im);
# hex_to_rgb
# <a href='http://http://www.webstyleboard.de/t3945' target='_blank'>http://www.webstyleboard.de/t3945</a>
function hex_to_rgb($color,$im) {
$color = preg_replace("/#/", "", $color);
for ($i = 0; $i < 6; $i += 2) {
$rgb[] = hexdec(substr($color, $i, 2));
}
return ImageColorAllocate ($im, $rgb[0], $rgb[1], $rgb[2]);
}
?>
captcha_options.php
(wie der Name schon sagt: hier werden einige Optionen festgelegt)
require("captcha_options.php");
session_start();
if(!$_SESSION['captcha_string'])die();
header ("Content-type: image/png");
mt_srand((double)microtime()*1000000);
$string = $_SESSION['captcha_string'];
$font = 5;
$width = ImageFontWidth($font) * strlen($string)+20;
$height = ImageFontHeight($font)+10;
$im = @imagecreate ($width,$height);
$background_color = hex_to_rgb($code_gbcolor,$im);
$text_color = hex_to_rgb($code_textcolor,$im);
$bcolor = hex_to_rgb($code_punktcolor,$im);
for($i=0;$i<=$code_punkteanzahl;$i++){
mt_srand((double)microtime()*1000000);
$p_x1 = mt_rand(0,$width);
$p_y1 = mt_rand(0,$height);
$p_x2 = mt_rand(0,$width);
$p_y2 = mt_rand(0,$height);
imagesetpixel ( $im, $p_x1, $p_y1, $bcolor );
}
imagestring ($im, $font, 10, 5, $string, $text_color);
imagepng ($im);
# hex_to_rgb
# <a href='http://http://www.webstyleboard.de/t3945' target='_blank'>http://www.webstyleboard.de/t3945</a>
function hex_to_rgb($color,$im) {
$color = preg_replace("/#/", "", $color);
for ($i = 0; $i < 6; $i += 2) {
$rgb[] = hexdec(substr($color, $i, 2));
}
return ImageColorAllocate ($im, $rgb[0], $rgb[1], $rgb[2]);
}
?>
<?PHP
##########################################################
# Modifikation: simples Captcha per Session by TNS #
# Version: 1.0 vom 28.06.2005 #
# von: TNS / www.devas.de / www.webstyleboard.de #
##########################################################
### Sicherheitscode aktiv, dann "true" eintragen, ansonsten "false"
$set_sicherheitscode = "true";
### Hintergrundfarbe des Codebildes
$code_gbcolor = "#FFFFFF";
### Textfarbe des Codebildes
$code_textcolor = "#000000";
### Farbe der Punkte
$code_punktcolor = "#ADADAD";
### Anzahl der Punkte auf dem Codebild
$code_punkteanzahl = 200;
### Rahmendicke um das Codebild (O = ohne Rahmen)
$code_bordersize = 1;
### Rahmenfarbe
$code_bordercolor = "#000000";
#####################################
# Standardeinstellung
#####################################
# $set_sicherheitscode = "true";
# $code_gbcolor = "#FFFFFF";
# $code_textcolor = "#000000";
# $code_punktcolor = "#ADADAD";
# $code_punkteanzahl = 200;
# $code_bordersize = 1;
# $code_bordercolor = "#000000";
#####################################
?>
Mit diesen beiden Dateien haben wir nun die Grundvoraussetzungen erfüllt. Kommen wir nen dazu, die erste Datei zu verändern ... und zwar die gb-eintragsformular.php
An den Anfang dieser Datei kommt folgender PHP-Code:
##########################################################
# Modifikation: simples Captcha per Session by TNS #
# Version: 1.0 vom 28.06.2005 #
# von: TNS / www.devas.de / www.webstyleboard.de #
##########################################################
### Sicherheitscode aktiv, dann "true" eintragen, ansonsten "false"
$set_sicherheitscode = "true";
### Hintergrundfarbe des Codebildes
$code_gbcolor = "#FFFFFF";
### Textfarbe des Codebildes
$code_textcolor = "#000000";
### Farbe der Punkte
$code_punktcolor = "#ADADAD";
### Anzahl der Punkte auf dem Codebild
$code_punkteanzahl = 200;
### Rahmendicke um das Codebild (O = ohne Rahmen)
$code_bordersize = 1;
### Rahmenfarbe
$code_bordercolor = "#000000";
#####################################
# Standardeinstellung
#####################################
# $set_sicherheitscode = "true";
# $code_gbcolor = "#FFFFFF";
# $code_textcolor = "#000000";
# $code_punktcolor = "#ADADAD";
# $code_punkteanzahl = 200;
# $code_bordersize = 1;
# $code_bordercolor = "#000000";
#####################################
?>
<?php
### Dateiänderung 1 für den simple-Captcha-by-TNS
require("captcha_options.php");
if($set_sicherheitscode=="true"){
session_start();
$_SESSION['captcha_string'] = mt_rand(10000,99999);
}
### Ende Dateiänderung 1
?>
Damit das auch alles so seinen Sinn macht, muss das Formular ein wenig erweitert werden und zwar um das Bild mit dem Zahlen und einem Textfeld
### Dateiänderung 1 für den simple-Captcha-by-TNS
require("captcha_options.php");
if($set_sicherheitscode=="true"){
session_start();
$_SESSION['captcha_string'] = mt_rand(10000,99999);
}
### Ende Dateiänderung 1
?>
<img src="captcha_img.php" alt="" />
<input type="text" name="captcha_str" value="" /> 5stelligen Code eintragen
Kommen wir nun zu der Datei: gb-datenbankeintrag.php
Am Anfang dieser Datei müssen wir natürlich auch hier erstmal die Session starten:
<input type="text" name="captcha_str" value="" /> 5stelligen Code eintragen
<?php
### Dateiänderung 2 für den simple-Captcha-by-TNS
require("captcha_options.php");
if($set_sicherheitscode=="true"){
session_start();
}
### Ende Dateiänderung 2
?>
jetzt müssen wir natürlich noch testen, ob der Code stimmt, den der Mensch da einträgt. In der Datei gb-datenbankeintrag.php wird ja zumeist auch einiges überprüft, bevor man den Gästebucheintrag in die Datenbank lässt. in diese Überprüfung bauen wir nun folgendes ein:
### Dateiänderung 2 für den simple-Captcha-by-TNS
require("captcha_options.php");
if($set_sicherheitscode=="true"){
session_start();
}
### Ende Dateiänderung 2
?>
<?php
### Dateiänderung 3 für den simple-Captcha-by-TNS
if($set_sicherheitscode=="true"){
if(isset($_POST['captcha_str'])) $_POST['captcha_str'] = trim($_POST['captcha_str']);
if($_POST['captcha_str']!=$_SESSION['captcha_string']){
// ERROR ERROR ERROR ;)
// mache was, denn der eingegebene Code ist falsch oder fehlt
}
}
### Ende Dateiänderung 3
?>
Das war es schon. :)
Ich hoffe ich konnte weiterhelfen.### Dateiänderung 3 für den simple-Captcha-by-TNS
if($set_sicherheitscode=="true"){
if(isset($_POST['captcha_str'])) $_POST['captcha_str'] = trim($_POST['captcha_str']);
if($_POST['captcha_str']!=$_SESSION['captcha_string']){
// ERROR ERROR ERROR ;)
// mache was, denn der eingegebene Code ist falsch oder fehlt
}
}
### Ende Dateiänderung 3
?>
Startseite
Projekte
Portfolio
Stand-Alone & Anpassungen
devAScms Basis Edition
devAScms DJ Edition
devAScms Design Templates
Tutorials/Codeschnipsel
PHP
Kleinigkeiten
Cronjob.de - Monitor
Passwortgenerator
MehrwertsteuerRechner
Crypter
ByteRechner
Farbverläufer
HDDR-Umrechner
Timestamp-Rechner
devAS.de bei Twitter
Kontakt
Gästebuch
Impressum
