PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
» MySQL
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
PHP Forum
Mathe Nachhilfe
Suchmaschinenoptimierung

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&uuml;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

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Entwickler Forum

» insert nach login

» Tabellenzelle zu groß







© PHP-Einfach.de 2003 - 2012