Marktplatz Downloads Tutorials Forum

Designnation bietet auch:

Tutorial hinzufügen

Beliebte Links Weitere Optionen

Tutorial suchen

Titel

Schlüsselwörter

PHP / MySQL Tutorial: Spamschutz mittels Captcha (Klasse)



Ranking: +6   Kommentare: 9   |   Bewertung: Keine Berechtigung!  

Moin moin,

Ich melde mich wieder der Versprochenen neuen Klasse. Ich habe dafür meine Captcha Klasse ausgesucht. Da es sich hier um Tuts handelt werde ich auch etwas erklären =) Aber nicht die Klasse. Die werde ich euch so posten und ehr erklären, wie man sie verwendet!

Was ist ein Captcha???:

Ein Captcha ist ein Bild in dem Zeichen sind. Dieses kennt ihr z.B. von ICQ, wenn man sich ein neues Konto einrichtet! Man muss aus einem Bild Zeichen abtippen, eine Rechenaufgabe lösen oder Ähnliches!

Und wofür braucht man so einen Mist???:

Das ist kein Mist! Denn wenn es das nicht gäbe, könnte man ja einen Bot schreiben, der sich immer wieder bei z.B. ICQ anmeldet! Mit einem Captcha ist das jedoch nicht möglich, da Bots normalerweiße nicht aus Bildern lesen können! Captchas werden auch oft bei Gästebücher verwenet!


Also hier die Klasse:

Code:


<?php

       
/**

     * Captcha Class for Xboard 2.1.3

     *

     * @author Maximilian Schmidt

     * @version 1.32

     * @package Secure Package

     * @copyright xTreme Board Software and Maximilian Schmidt

     * 

     */

    
class Xcaptcha

    
{

        private 
$icons;

        private 
$iconsSum;

        private 
$iconWidth;

        private 
$captchaHeight;

        private 
$sessionName;

        private 
$font;

        private 
$imageType;

        

        public function 
__construct($icons = array("0""1""2""3""4""5""6""7""8""9"), $imageType "png"$iconsSum 10$font "arial.ttf"$captchaHeight 50$iconWidth 20$sessionName "code")

        {

            switch(
strtolower($imageType))

            {

                case 
"png":  $imageType "png";  break;

                case 
"gif":  $imageType "gif";  break;

                case 
"jpeg"$imageType "jpeg"; break;

                case 
"jpg":  $imageType "jpeg"; break;

                default:     
$imageType "png";  break;

            }

            

            
$this -> icons         $icons;

            
$this -> iconsSum      $iconsSum;

            
$this -> iconWidth     $iconWidth;

            
$this -> captchaHeight $captchaHeight;

            
$this -> sessionName   $sessionName;

            
$this -> font          $font;

            
$this -> imageType     $imageType;

        }

        

        public function 
sendHeader()

        {

            
header("Cache-Control: no-cache, must-revalidate");

            
header("Content-type: image/" $this -> imageType);

        }

        

        public function 
captcha($return false)

        {

            
srand((double)microtime()*10000000);

            

            

            
$x $this -> iconWidth $this -> iconsSum 4;

            
$y $this -> captchaHeight;

            

            
$img imagecreate($x,$y);

            

            
$color_body imagecolorallocate($img,255,255,255);

            
$color_b    imagecolorallocate($img,0,150,200);

            
$color_l    imagecolorallocate($img,200,200,200);

            

            
$securecode '';

            

            for(
$i=rand()%12$i<$y$i+=rand()%12)

            {

                
ImageLine($img0$i$x$i$color_l);

            }

            

            for(
$i=rand()%12$i<$x$i+=rand()%12)

            {

                
ImageLine($img$i0$i$y$color_l);

            }

            

            for(
$i=rand()%10;$i<$x;$i+=rand()%9)

            {

                
ImageLine($img0rand(0$x), 0rand(0$y), $color_l);

            }

            

            for(
$i=rand()%10;$i<$x;$i+=rand()%9)

            {

                
ImageLine($imgrand(0$x), 0rand(0$y), 0$color_l);

            }

            

            
ImageLine($img00$x0$color_b);

            
ImageLine($img0$y-1$x$y-1$color_b);

            
ImageLine($img000$y-1$color_b);

            
ImageLine($img$x-10$x-1$y-1$color_b);

            

            for(
$i 0$i $this->iconsSum$i++)

            {

                
$mzahl $this -> icons[rand(0,count($this -> icons))];

                
$securecode .= $mzahl;

                

                
ImageTTFText ($imgrand(10,14), rand(-20,20), $i $this -> iconWidth 3rand(25,40), imagecolorallocate($img,rand(77,255),rand(20,170),rand(50,200)), $this -> font$mzahl);

            }

            

            
$_SESSION[$this -> sessionName] = $securecode;

            

            if(!
$return)

            {

                switch(
strtolower($imageType))

                {

                    case 
"png":  imagepng($img);  break;

                    case 
"gif":  imagegif($img);  break;

                    case 
"jpeg"imagejpeg($img); break;

                    case 
"jpg":  imagejpeg($img); break;

                    default:     
imagepng($img);  break;

                }

            }

            else

            {

                return 
$img;

            }

        }

    }

?>



Diese könnt ihr in ein neues Skript einfügen oder sie in eure Includes tun.

So, ich erkläre euch jetzt wie ihr sie anwendet:

1.) Neue Instanz erzeugen

Code:




<?php

$captcha 
= new Xcaptcha();

?>





2.) Zeichen festlegen, also die, die dann angezeigt werden(Tipp: Verwendet keine O's, da sie mit 0 verwechselt weren können!!!)

Code:




<?php

$zeichen 
= array("0""1""2""3""4""5""6""7""8""9");



$captcha = new Xcaptcha();

?>





In dem folgenden Captcha werden also nun Zeichen von 0 bis 9 angezeigt!

3.) Tue eine Schriftart Datei in den Ordner, in dem du die Captcha Datei abspeicherts(du findest Schriftarten in der Systemsteurung -> Schriftarten)

4.) Einstellungen festlegen(Bitte Kommentare beachten):

Code:




<?php

$zeichen 
= array("0""1""2""3""4""5""6""7""8""9");



// Hoehe des Captchas in Pixel

$hoehe 50;



// Anzahl der Zeichen(empfohlen: zwischen 4 und 10)

$anzahlZeichen 10;



// Breite eines Zeichens(empfohlen: 20)

$breiteZeichen 20;



// SESSION Name: Der Code wird später in die Variable SESSION[] gespeichert, dazu später mehr...

$sessionName "code";



// Dateipfad zur Font Datei(Bitte anpassen!!!!)

$font "arial.ttf";



// Typ der Grafik(PNG, GIF, JPEG)

$type "png";



$captcha = new Xcaptcha();

?>





5.) Einstellungen an Klasse übergeben

Code:




<?php

$zeichen 
= array("0""1""2""3""4""5""6""7""8""9");



// Hoehe des Captchas in Pixel

$hoehe 50;



// Anzahl der Zeichen(empfohlen: zwischen 4 und 10)

$anzahlZeichen 10;



// Breite eines Zeichens(empfohlen: 20)

$breiteZeichen 20;



// SESSION Name: Der Code wird später in die Variable SESSION[] gespeichert, dazu später mehr...

$sessionName "code";



// Dateipfad zur Font Datei(Bitte anpassen!!!!)

$font "arial.ttf";



// Typ der Grafik(PNG, GIF, JPEG)

$type "png";



$captcha = new Xcaptcha($zeichen$type$anzahlZeichen$font$hoehe$breiteZeichen$sessionName);

?>





6.) Header ausgeben(Ist sehr wichtig, damit der Browser weiß, dass es sich um eine Grafik handelt) ACHTUNG: Vor dem Ausgeben des Headers Darf keine!!! Ausgabe durch PHP erfolgen(echo, print), und es darf Nichts vo dem <?php stehem(auch kein Leerzeichen oder so!!!)

Code:




<?php

$zeichen 
= array("0""1""2""3""4""5""6""7""8""9");



// Hoehe des Captchas in Pixel

$hoehe 50;



// Anzahl der Zeichen(empfohlen: zwischen 4 und 10)

$anzahlZeichen 10;



// Breite eines Zeichens(empfohlen: 20)

$breiteZeichen 20;



// SESSION Name: Der Code wird später in die Variable SESSION[] gespeichert, dazu später mehr...

$sessionName "code";



// Dateipfad zur Font Datei(Bitte anpassen!!!!)

$font "arial.ttf";



// Typ der Grafik(PNG, GIF, JPEG)

$type "png";



$captcha = new Xcaptcha($zeichen$type$anzahlZeichen$font$hoehe$breiteZeichen$sessionName);



$captcha -> sendHeader();

?>





7.) Ausgeben des Captchas

Code:




<?php

$zeichen 
= array("0""1""2""3""4""5""6""7""8""9");



// Hoehe des Captchas in Pixel

$hoehe 50;



// Anzahl der Zeichen(empfohlen: zwischen 4 und 10)

$anzahlZeichen 10;



// Breite eines Zeichens(empfohlen: 20)

$breiteZeichen 20;



// SESSION Name: Der Code wird später in die Variable SESSION[] gespeichert, dazu später mehr...

$sessionName "code";



// Dateipfad zur Font Datei(Bitte anpassen!!!!)

$font "arial.ttf";



// Typ der Grafik(PNG, GIF, JPEG)

$type "png";



$captcha = new Xcaptcha($zeichen$type$anzahlZeichen$font$hoehe$breiteZeichen$sessionName);



$captcha -> sendHeader();

$captcha -> captcha();

?>





8.) Habe ich vergessen: session_start durchführen, damit der Code weiterverarbeitet werden kann!

Code:




<?php

session_start
();



$zeichen = array("0""1""2""3""4""5""6""7""8""9");



// Hoehe des Captchas in Pixel

$hoehe 50;



// Anzahl der Zeichen(empfohlen: zwischen 4 und 10)

$anzahlZeichen 10;



// Breite eines Zeichens(empfohlen: 20)

$breiteZeichen 20;



// SESSION Name: Der Code wird später in die Variable SESSION[] gespeichert, dazu später mehr...

$sessionName "code";



// Dateipfad zur Font Datei(Bitte anpassen!!!!)

$font "arial.ttf";



// Typ der Grafik(PNG, GIF, JPEG)

$type "png";



$captcha = new Xcaptcha($zeichen$type$anzahlZeichen$font$hoehe$breiteZeichen$sessionName);



$captcha -> sendHeader();

$captcha -> captcha();

?>





9.) So, diese Datei sollte so aussehen. Speichert sie bitte als captcha.php!(Natürlich könnt ihr sie auch anders nennen, nur müsst ihr den Dateinamen in den folgenden Beispielen anpassen):

Code:




<?php

/**

     * Captcha Class for Xboard 2.1.3

     *

     * @author Maximilian Schmidt

     * @version 1.32

     * @package Secure Package

     * @copyright xTreme Board Software and Maximilian Schmidt

     * 

     */

    
class Xcaptcha

    
{

        private 
$icons;

        private 
$iconsSum;

        private 
$iconWidth;

        private 
$captchaHeight;

        private 
$sessionName;

        private 
$font;

        private 
$imageType;

        

        public function 
__construct($icons = array("0""1""2""3""4""5""6""7""8""9"), $imageType "png"$iconsSum 10$font "arial.ttf"$captchaHeight 50$iconWidth 20$sessionName "code")

        {

            switch(
strtolower($imageType))

            {

                case 
"png":  $imageType "png";  break;

                case 
"gif":  $imageType "gif";  break;

                case 
"jpeg"$imageType "jpeg"; break;

                case 
"jpg":  $imageType "jpeg"; break;

                default:     
$imageType "png";  break;

            }

            

            
$this -> icons         $icons;

            
$this -> iconsSum      $iconsSum;

            
$this -> iconWidth     $iconWidth;

            
$this -> captchaHeight $captchaHeight;

            
$this -> sessionName   $sessionName;

            
$this -> font          $font;

            
$this -> imageType     $imageType;

        }

        

        public function 
sendHeader()

        {

            
header("Cache-Control: no-cache, must-revalidate");

            
header("Content-type: image/" $this -> imageType);

        }

        

        public function 
captcha($return false)

        {

            
srand((double)microtime()*10000000);

            

            

            
$x $this -> iconWidth $this -> iconsSum 4;

            
$y $this -> captchaHeight;

            

            
$img imagecreate($x,$y);

            

            
$color_body imagecolorallocate($img,255,255,255);

            
$color_b    imagecolorallocate($img,0,150,200);

            
$color_l    imagecolorallocate($img,200,200,200);

            

            
$securecode '';

            

            for(
$i=rand()%12$i<$y$i+=rand()%12)

            {

                
ImageLine($img0$i$x$i$color_l);

            }

            

            for(
$i=rand()%12$i<$x$i+=rand()%12)

            {

                
ImageLine($img$i0$i$y$color_l);

            }

            

            for(
$i=rand()%10;$i<$x;$i+=rand()%9)

            {

                
ImageLine($img0rand(0$x), 0rand(0$y), $color_l);

            }

            

            for(
$i=rand()%10;$i<$x;$i+=rand()%9)

            {

                
ImageLine($imgrand(0$x), 0rand(0$y), 0$color_l);

            }

            

            
ImageLine($img00$x0$color_b);

            
ImageLine($img0$y-1$x$y-1$color_b);

            
ImageLine($img000$y-1$color_b);

            
ImageLine($img$x-10$x-1$y-1$color_b);

            

            for(
$i 0$i $this->iconsSum$i++)

            {

                
$mzahl $this -> icons[rand(0,count($this -> icons))];

                
$securecode .= $mzahl;

                

                
ImageTTFText ($imgrand(10,14), rand(-20,20), $i $this -> iconWidth 3rand(25,40), imagecolorallocate($img,rand(77,255),rand(20,170),rand(50,200)), $this -> font$mzahl);

            }

            

            
$_SESSION[$this -> sessionName] = $securecode;

            

            if(!
$return)

            {

                switch(
strtolower($imageType))

                {

                    case 
"png":  imagepng($img);  break;

                    case 
"gif":  imagegif($img);  break;

                    case 
"jpeg"imagejpeg($img); break;

                    case 
"jpg":  imagejpeg($img); break;

                    default:     
imagepng($img);  break;

                }

            }

            else

            {

                return 
$img;

            }

        }

    }



session_start();



$zeichen = array("0""1""2""3""4""5""6""7""8""9");



// Hoehe des Captchas in Pixel

$hoehe 50;



// Anzahl der Zeichen(empfohlen: zwischen 4 und 10)

$anzahlZeichen 10;



// Breite eines Zeichens(empfohlen: 20)

$breiteZeichen 20;



// SESSION Name: Der Code wird später in die Variable SESSION[] gespeichert, dazu später mehr...

$sessionName "code";



// Dateipfad zur Font Datei(Bitte anpassen!!!!)

$font "arial.ttf";



// Typ der Grafik(PNG, GIF, JPEG)

$type "png";



$captcha = new Xcaptcha($zeichen$type$anzahlZeichen$font$hoehe$breiteZeichen$sessionName);



$captcha -> sendHeader();

$captcha -> captcha();

?>





So, jetzt braucht ihr ein Formular, dass ihr vor Spam schützen wollt, nehmen wir als Beispiel einen Newslettereintrag.
10.) Schreibt einfach dieses Musterformular ab, und speichert es als newsletter.html ab:

Code:




<html>

<head>

<title>Newsletter</title>

</head>

<body>

<form action="save.php" method="post">

Name: <input type="text" name="name" /><br />

E-Mail: <input type="text" name="mail" /><br />

Bitte tippen sie den folgenden Text ab: <img src="captcha.php" alt="Bitte aktivieren sie Bilder!" /><br />

<input type="text" name="captcha" /><br />

<br />

<input type="submit" value="Eintragen!" />

</form>

</body>

</html>




Ich erkläre kurz, was das Formular oben macht. Es wird nach Name und E-Mail gefragr, darunter wird das Captcha aufgerufen, welches man abtippen muss.

11.) Nun kommt die Datei save.php, in der in diesem Beispiel, der Name, die E-Mail und der abgetippte Code gesand wird:

Code:




<?php

session_start
();



// Pruefen ob alles ausgefuellt wurde

if($_POST['name'] && $_POST['mail'] && $_POST['captcha'])

{

    
$sessionName "code"// <-- Hier der sessionName eingeben, den ihr oben benutzt habt! Wenn ihr ihn oben gelassen habt, lasst es auch hier stehen



    
if($_SESSION[$sessionName] == $_POST['captcha'])

    {

        
// Daten können weitervearbeitet werden, Code richtig abgetippt

        
echo "Vielen Dank!";

    }

    else

    {

        echo 
"Code falsch abgetippt!!!";

    }

}

?>





12.) So, ihr solltet jetzt die Dateien newsletter.html, captcha.php und save.php in eurem Ordner haben! Dann könnt ihr es Testen


So, das war mein 2. Tut in Sachen PHP, ich hoffe, ihr habt alles verstanden und ich habe euch weitergeholfen!

Würde mich über einen Kommentar freuen! Bei Fragen, macht einfach nen Kommi =)

Und ich hoffe ich habe Nichts vergessen :D

Veröffentlicht von: Maxximum
Veröffentlicht am: 28 Oct. 2008
Bookmarks: social bookmarking yigg it Linkarena Technorati Yahoo Mr. Wrong
Schlüsserwörter: captcha Klasse spam xboard


Themenverwandte Tutorials


Kommentar(e) (9)


Maxximum sagt:

Zitat Annonator:

heyho,

Code:


for($i = 0; $i < count($this -> icons); $i  )


durch

Code:


for($i = 0; $i < $this->iconsSum; $i  )

abändern und schon ersetzen dann kann man auch die länge bestimmen von dem captcha ;D und dann funzt dein tutorial code auch wenn man die länge des captchas ändert




vielen Dank, habe ich so auch in meiner aktuellen Klasse, wahrscheinlich ist das hier die alte version... :)

Werds ändern

13 Jun. 2009 10:47:36 • Antworten


Annonator sagt:

heyho,

Code:


for($i = 0; $i < count($this -> icons); $i  )


durch

Code:


for($i = 0; $i < $this->iconsSum; $i  )

abändern und schon ersetzen dann kann man auch die länge bestimmen von dem captcha ;D und dann funzt dein tutorial code auch wenn man die länge des captchas ändert

Zuletzt bearbeitet am: 12 Jun. 2009 17:06:00

12 Jun. 2009 17:05:19 • Antworten


daprophet sagt:

Sehr schön! Ich bin zwar kein Freund von Captchas aber dieses Tutorials ist sehr gut.

Diese Schleife for Schleife würde ich noch als Methode auslagern.

Zuletzt bearbeitet am: 10 Jan. 2009 11:15:25

10 Jan. 2009 11:14:44 • Antworten


xflummix sagt:

Echt coole Klasse, und cooles Tutorial
-thumbsup-
greets, www.simple-content.net ;)

9 Jan. 2009 23:53:14 • Antworten


Maxximum sagt:

Zitat manuakasam:

Prinzipiell in Ordnung.
Versuche doch bitte die Tutorials etwas übersichtlicher zu gestalten. Den selben Batzen Code 5-6 mal zu sehen ist mehr als unnötig und vor allem für ungeübte Augen auch mehr als irreführend.

Den Code Stück für Stück aufbauen und am Ende, oder aber am Anfang, einmal komplett zeigen.



OK, werd ich nächstes mal drauf achten, vielen dank =)

9 Nov. 2008 14:25:54 • Antworten


manuakasam sagt:

Prinzipiell in Ordnung.
Versuche doch bitte die Tutorials etwas übersichtlicher zu gestalten. Den selben Batzen Code 5-6 mal zu sehen ist mehr als unnötig und vor allem für ungeübte Augen auch mehr als irreführend.

Den Code Stück für Stück aufbauen und am Ende, oder aber am Anfang, einmal komplett zeigen.

4 Nov. 2008 08:38:14 • Antworten


AweSome! sagt:

Muss sagen klasse Sache ;)


28 Oct. 2008 19:02:53 • Antworten


Maxximum sagt:

Jo thx :-), hast dus getestet? Funktioniert alles?

Hier der Vorschaulink: http://img225.imageshack.us/img225/2613/captchagv0.png

Zuletzt bearbeitet am: 28 Oct. 2008 19:02:51

28 Oct. 2008 19:02:17 • Antworten


chpalm sagt:

Wow, cooles Captcha. Schaut auch gut aus :)
Vlt solltest du noch einen Link zu einer Vorschau hinzufügen.
Ansonsten top

28 Oct. 2008 18:59:05 • Antworten



Anfang

<<

1

>>

Ende

Kommentar eintragen


!! Jetzt kostenlos anmelden oder einloggen und mitdiskutieren!


Partner: • Designer in ActionFlash HilfeTutorials.dePixelio.deFlashstar BlogLizenzfreie Bilder