yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

Schutz vor Flood durch Sicherheitscode



Als erstes erzeugen wir mal das Bild. Das Bild muss in einer eigenen PHP Datei (in diesem Fall secureimage.php) liegen und kann ausschließlich via img-Tags in ein anderes PHP Script eingebunden werden.

PHP-Datei:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/*Sicherheitscode - vielseitig einsetzbar
Copyright 2004 by michi */
header("Content-Type: image/png");
/* das Bild und seine Eigenschaften */
$im imagecreate(6121); //das bilde erstellen
$bgcolor imagecolorallocate($im255255255); //Backgroundcolor setzen
$fontcolor imagecolorallocate($im000); //Schriftfarbe setzen

/* die Linien auf das Bild "zeichnen" */
for($x=0$x <= 100$x+=10)
    
imageline($im$x0$x50$fontcolor);
for(
$y=0$y <=50$y+=5)
    
imageline($im0$y100$y$fontcolor);

/* den Zahlencode auf das Bild "schreiben" */
imagestring($im583$_COOKIE['zufallszahl'], $fontcolor);
imagepng($im);
imagedestroy($im);
?>


Zu den Imagefunktionen am besten dieses Tutorial von LLCoolDannY lesen, fals Imagefunktionen unklar sein sollten.
Besonders hervorzuheben sind hier die etwas außergewöhnlichen for-Schleifen: Hier wird nicht bei jedem Durchlauf $i um den Wert 1 erhöht, sondern gleich um 10 bzw. 5. Die Syntax sieht folgendermasen aus: $i+=n, wobei n eine natürliche Zahl ist, durch die der Wert $i um n erhöht wird (Wer Mathe nicht mag, kann PHP nicht lieben...).

Nun zu der anderen (Haupt-) Datei:
PHP-Datei:
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
<?php
/*Sicherheitscode - vielseitig einsetzbar
Copyright 2004 by michi */

/* Zufallsgenerator starten */
$zufallszahl mt_rand(1000099999);
setcookie("zufallszahl"$zufallszahl);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>secureimage &copy; 2004 by michi</title>
</head>
<body onLoad="this.document.secure.code.focus();">
<?php


if(empty($_REQUEST['action'])) {
?>
<form name="secure" action="index.php?action=check" method="post"><fieldset style="text-align:center; vertical-align:middle;"><legend>SicherheitsCode</legend>
<input type="text" value="" size="10" maxlength="5" name="code" onKeyPress="if(event.keyCode < 48 || event.keyCode > 57) { event.returnValue = false; } else {if(event.which < 48 || event.which > 57) return false;}">&nbsp;
<img src="secureimage.php" alt="SecureImage" border="0">&nbsp;
<input type="submit" value="ab damit"></fieldset>
</form>
<?php
}
if(
$_REQUEST['action'] == "check") {
    if(
$_POST['code'] != $_COOKIE['zufallszahl']) {
        echo 
'Sorry, aber du hast dich vertippt! 
'
;
        echo 
'<a href="index.php">versuch dein glück doch nochmal</a>';
    } else {
        echo 
'gut gemacht, kein Tippfehler! Respekt :P
'
;
        echo 
'<a href="index.php">willste nochmal?</a>';
    }
}
?>
</body>
</html>


Als erstes wird hier eine Zufallszahl mittels mt_rand() erstellt. 10000 und 99999 sind dabei Mindest- bzw. Maximalwert. Der Zufallsgenerator wurde nicht gestartet, da sonst bei jedem Aufruf der Variable etwas anderes rauskäme, was man in diesem Fall nicht gebrauchen kann. Die Zahl wird danach per Cookie gespeichert. Bei Fragen zu Cookies zuerst bitte dieses Tutorial lesen. Auf diesen Cookie habe ich bereits in der ersten Datei zurückgegriffen, um die Zahlen auf das Bild zu schreiben.
Es folgt ein Formular, mit ein bisschen JavaScript komfortabler gemacht und ein Fieldset hinzugefügt. Der Code erscheint auf dem Bild und kann ins Input eingegeben werden. Nach dem Abschicken wird mit einer simplen if-Abfrage als erstes die abgefragte "action" geprüft und dann, ob der Wert des Cookies (und damit der Sicherheistcode) mit dem gepostetem entspricht. Wenn ja, werden die 2 echo-Befehle ausgeführt, die zu dem If-Befehlsblock gehören, ansonsten die 2 aus dem else-Befehlsblock.

Das war's eigentlich schon; Die Entwicklung dieses Codes hat mich mehr Zeit gekostet als das Tutorial dazu. Copyright liegt bei mir und darf nicht entfernt werden (ist ja auch nur en unsichtbares). Bei Fragen einfach die Comments benutzen. Für eine kleine Demo, hier klicken!

Geschrieben von michi am 18.06.2004 (12825x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

Gutes Tutorial!



Respect :)
Geschrieben von LLCoolDannY
danke :)



ich darf schonmal ankündigen, dass das tutorial bald geupdatet wird: es wird dann nicht mehr mit Cookies gearbeitet sondern mit Sessions, sodass es auch bei der minderheit geht, die keine Cookies aktzeptiert...
Geschrieben von michi
Ich übernehme das für dich :)
Geschrieben von LLCoolDannY
erst mal danke für den code
wie sieht es den aus mit den sessions?
Geschrieben von boss
Noch ein Hinweis, bei der Verwendung von Cookies ist es kein wirklicher Schutz, da die Zufallszahl auf dem Clientsystem gepeichert wird und somit von evtl. Bots ausgelesen werden kann.

Für SESSIONS einfach in beide Dateien session_start() ganz oben rein und statt $_COOKIE['zufallszahl'] $_SESSION['zufallszahl'] benuzten
Geschrieben von Johannes