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

Captcha mit dynamischen Fragen

Zurück zur Übersicht

Dieser Codeschnipsel zeigt statt einer Buchstabenreihnfolge eine Frage an, die der Benutzer beantworten muss.

Hallo ,

da ich oft gelesen habe , dass Captchas nichts nützen , da sie eh immer geknackt werden , habe ich mir überlegt wie man ein dynamisches Fragen - Antworten - Captcha erstellt - mit Erfolg!

Hier will ich euch zeigen wie das Simple , aber starke , Captcha funktioniert und wie ihr es selber coden und anpassen könnt.

Zuerst brauchen wir das Hauptcaptcha , ich habe eins von www.stoppt-den-spam.info genommen ,da ich mich nicht mit Bildern erstellen auskenne!

captcha.php
 Code 
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:
<?php
// Vielen Dank an www.stoppt-den-spam.info ( modifiziert ) 

session_start();
unset($_SESSION['captcha_spam']);
unset($_SESSION["zahl_frage"]);
unset($_SESSION["antwort_cap"]);

   include("fragen.php");
   srand((double)microtime()*1000000);
   $zahl_frage = rand(0,$wieviele);
   $_SESSION["zahl_frage"] = $zahl_frage;
   
   
   $_SESSION['captcha_spam'] = $fragen[$_SESSION["zahl_frage"]];
   
   
   
   
   $text   =  $_SESSION['captcha_spam'];
   $_SESSION["antwort_cap"] = $antworten[$_SESSION["zahl_frage"]];  
     
     
     
   header('Content-type: image/png');
   $img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
   $color = ImageColorAllocate($img, 255, 255,255); //Farbe
   $ttf = "Fradm.TTF"; //Schriftart
   $ttfsize = 15; //Schriftgrösse
   $angle = 0;
   $t_x = 20;
   $t_y = 25;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   imagepng($img);
   imagedestroy($img); ;
?>


Zuerst werden die Sessions gestartet und geresetet , dann werden die Fragen eingeladen und ein Zufallsmechanismus wählt irgendeine Frage ( durch Arrays ) und lässt sie auf den Bild anzeigen.

Außerdem wird die Antwort mitgleich gespeichert, damit sie im Formular verglichen werden kann , ob diese Antwort wirklich auf die Antwort passt.
Die Antwort Nummer ist zu gleich auch die Frage Nummer.

Ihr benötigt die Fradm.TTF , aber ihr könnt die Schriftart ganz leicht auswechslen durch eine beliebige , sie muss aber im Ordner mit drin sein , in der auch die captcha.php ist.

Das Hintergrundbild sieht so aus:



Das muss ebenfalls in einen Ordner mit captcha.php rein.

Nun kommen wir zu den Fragen , die man selber leicht erstellen und löschen kann sowie die Antworten dazu:

Fragen.php:

 Code 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<?php

$fragen = array("Welches Farmtier macht Milch?","Was dreht sich um die Erde?","Wieviel Beine hat der Mensch?","Bist du ein Bot?");

$antworten = array("Kuh","Mond","Zwei","Nein");

$wieviele = count($fragen) - 1;

?>


Es wird ein Arrasy erstellt in denen alle Fragen kommen ( von 0 bis X ) und die Antworten genauso ( von 0 bis X ). Danach wird gezählt wieviele Fragen es gibt , und soviele Antworten gibt es logischerweise. Dies ist nötig , damit eine Zufallszahl gewählt werden kann , der in diesem Bereich liegt. Sonst wird eine Zufallszahl z.B 48 gewählt und in dieser Zahl ist überhaupt keine Frage gespeichert!

Ein Wert muss von $wieviele abgezogen werden , da die 0 noch mit drin ist und deswegen immer ein zuviel ist ( wenn man nicht -1 macht , dann kriegt man oft keine Frage zu Gesicht )

Zu guter Letzt das Formular:

eingabe.php

 Code 
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:
<?php session_start(); ?>
<form action="eingabe.php" method="post">
<img src="captcha.php" alt="Captcha"><br><br>
<input type="text" name="captcha"> ( Gro&szlig;- und Kleinschreibung beachten ) &nbsp;&nbsp;
<input type="submit" name="send"><br>

</form>

<?php

if(isset($_POST["send"])) {


   if($_POST["captcha"] == $_SESSION["antwort_cap"] AND isset($_SESSION["antwort_cap"])) {
   
   
   // Wenn das Captcha richtig ist , Code ausfuehren....
   echo "<b>Benutzer wurde erfolgreich registriert..oder so.</b>";
   
   
   }
}

?>


Das Captcha.php wird als Bild eingeladen und man muss die Antwort dazu geben. Wenn man es abgeschickt hat , wird überprüft ob die Antwort zu der Frage passt , welche in der SESSION gespeichert wurde. Wenn die Arrays miteinander übereinstimmen , dann ist das Captcha richtig und es kann mit den Code weitergehen.

Dieses kleine Captcha ist besonders gut für amerikanische Bots und russische Bots , da diese keine Antworten dadrauf geben können , sondern ( wenn sie Glück haben ) die Frage die im Bild steht , ins Feld eintragen.

Man kann das Captcha natürlich weiter erweitern , aber in diesem Tutorial wird gezeigt wie man Arrays mit Sessions kombinieren kann.

Ein Danke an php-einfach , denn ohne die wär ich in PHP immer noch eine Null!

http://kellercoding.tk

mfg

Kommentare

Zurück zur Übersicht

Autor youzer

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