|
|
|
Sicherheitscode
Zurück zur Übersicht Dieser Script stellt ein Bild mit einem Sicherheitscode dar.
Damit ein Spambot nicht tausend mal ein Formular absendet, verwendet man bei Formularen oft einen 'Sicherheitscode'.
Dies ist eine Grafik mit einem Text/Code, den der User dann in ein Formularfeld eingeben muss.
Der Server überprüft dann nach dem Absenden ob der Sicherheitscode korekt war.
Dies kann man eigentlich relativ einfach in PHP realisieren.
Hier wird ein sechs Zeichen langer Sicherheitscode verwendet.
Zuerst brauchen wir wieder die Funktion für ein zufälligen String:
| PHP |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
|
<?php
function rand_string($lng)
{
mt_srand(crc32(microtime()));
//Welche Buchstaben benutzt werden sollen (Charset)
$buchstaben = "abcdefghijklmnpqrstuvwxyz";
$str_lng = strlen($buchstaben)-1;
$rand= "";
for($i=0;$i<$lng;$i++)
$rand.= $buchstaben{mt_rand(0, $str_lng)};
return $rand;
}
?>
|
|
Die Seite mit dem Formular zu registieren muss dann in etwa so aussehen:
| PHP |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
<?php
session_start();
$_SESSION['scode'] = rand_string(6);
?>
<form ....>
<!-- Hier das Bild mit dem Sicherheitscode -->
<img src="scode.php?<?php echo time(); ?>&<?php echo strip_tags(SID); ?>" alt="Sicherheitscode">
<input type="text" name="scode" maxlength="6">
|
|
Hier wird zuerst in die Session scode unser zufälliger Sicherheitscode gespeichert.
Danach wird das Bild scode.php ausgegeben, und als GET Variable wird die Zeit angehängt.
Dies verhindert, dass das Bild aus dem Browser-Cache geladen wird.
Zum Schluss ist dort noch ein Eingabefeld für den Sicherheitscode.
Jetzt kommen wir zu der Seite, die die Eingabe, und somit den Sicherheitscode überprüft.
Diese ist in etwas so aufgebaut:
| PHP |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
<?php
session_start();
$scode_form = $_POST['scode'];
$scode_ses = $_SESSION['scode'];
//Wichtig: Sicherheitscode in der Session überschreiben
$_SESSION['scode'] = rand_string(6);
if($scode_form == $scode_ses)
//Sicherheitscode ist richtig, Daten werden gespeichert
else
//Falschen Sicherheitscode angegeben
?>
|
|
Hier werden die beiden Sicherheitscodes, also der aus der Session und der aus dem Eingabefeld, überprüft.
Wenn diese identisch sind, dann werden die Daten gespeichert.
Ganz wichtig ist, dass der Sicherheitscode in der Session zufällig überschrieben wird, egal ob der Code jetzt richtig oder falsch war.
So jetzt kommen wir zu dem letzten, und wichtigstem Script.
Dieser Script stellt den Sicherheitscode als Grafik dar.
scode.php
| PHP |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
|
<?php
session_start();
mt_srand(crc32(microtime()));
//Abfrage des Sicherheitscodes
$string = $_SESSION['scode'];
if(empty($string))
die("Es wurde kein Sicherheitscode übertragen");
if(!extension_loaded("gd"))
die("Keine Grafik-Unterstützung vorhanden");
$image = imagecreate(100,35) OR die("Fehler beim Erstellen des Bildes");
$farbe_body=imagecolorallocate($image,0x00,0x00,0x5F);
$farbe_text = imagecolorallocate($image,0xFF,0xFF,0xFF);
//Sicherheitscode einzeichnen
$font = 5;
$x = mt_rand(2,35);
for($i=0;$i<strlen($string);$i++)
{
if(($y1 = $y_old-7)<2) $y1 = 2;
if(($y2 = $y_old+7)>15) $y2 = 15;
$y = mt_rand($y1,$y2);
imagestring ($image,$font,$x,$y, $string{$i}, $farbe_text);
$x+=11;
$y_old = $y;
}
if(function_exists("imagegif"))
{
Header("Content-type: image/gif");
ImageGif($image);
}
elseif (function_exists("imagepng"))
{
Header("Content-type: image/png");
ImagePng($image);
}
elseif (function_exists("imagejpeg"))
{
Header("Content-type: image/jpeg");
ImageJpeg($image, "", 0.5);
}
else
die("Keine Grafik-Unterstützung vorhanden");
?>
|
|
Damit diese Code funktioniert, muss die Erweiterung gd geladen sein, was bei so gut wie allen Servern der Fall ist.
Kommentare
Zurück zur Übersicht
Autor Andavos
|
|
|
|