Captcha Klasse

Guten Morgen!

Es ist vollbracht! Die Captcha-Klasse ist fertig geschrieben. Das Ergebnis kann hier betrachtet werden.

Ich möchte anmerken, dass für dieses Captcha keine Bilder verwendet werden. Alles wird automatisch generiert, auch der Farbverlauf im Hintergrund.

Ich habe nur ein Problem. Es kann irgendwie nach dem Aufruf der Klasse keine Ausgabe mehr gemacht werden. Wieso?
PHP:
<?php
	include ('Captcha.php');
	Captcha::run();
	echo 'Inhalt Captcha-SESSION: '.$_SESSION['captcha'];
?>
MfG, Andy
 
Zuletzt bearbeitet von einem Moderator:
Nun schon 2.5 Tage her, aber ich möchte dir dennoch gerne antworten:

PHP:
public static function run(){
    header("content-type: image/gif");
    // ...
}

Lass dir mal den "Quelltext" der Ausgabe darstellen - Dort solltest du dann den String "Inhalt Captcha-SESSION: SID" zu sehen bekommen - Der Browser verarbeitet jedoch während des Rendering-Prozesses den gesendeten Inhaltstyp, der in deinem Fall Image/Gif ist, und demnach stellt der Browser auch einfach eine Grafik vom Typ Gif dar. Dass die Zeichen des Strings nicht verarbeitet werden, liegt daran, dass diese nur scheinbar nicht verarbeitet werden - Sie liegen außerhalb der Bildausmaße und werden somit nicht für die sichtbare Grafik verarbeitet. Das ist übrigens auch nützlich, wenn man Archive und Bilddaten zu einer Masse vermengen möchte um zB Daten zu verstecken ;)
 
Hallo!
Es ist schwer sich den Seitenquelltext ausgeben zu lassen wenn der Contenttype - image/gif ist. Kannste ja mal bei meinem Beispiellink versuchen. :)

Wie muss ich das ganze denn jetzt ändern, damit ich das ganze zum Beispiel in eine Seite mit einem Formular einbauen kann, ohne dass die Seite und das Formular versteckt werden? Kann ich da einen allgemeineren Contenttype wählen?

Wäre dir für deine Antwort sehr dankbar.
MfG, Andy
 
Du musst eine Datei erstellen, die sich nur um die Ausgabe des Captchas kümmert. Diese kannst du dann mit einem normalen img-Tag ansprechen und das Captcha wird ausgegeben.
PHP:
// captcha.php
    include ('Captcha.php');
    Captcha::run();

HTML:
// formular.php
<form action="formular.php" method="post">
<img src="captcha.php" alt="Captcha"> <input type="text" value="">
<input type="submit" name="send">
</form>
 
Es ist schwer sich den Seitenquelltext ausgeben zu lassen wenn der Contenttype - image/gif ist. Kannste ja mal bei meinem Beispiellink versuchen. :)
Unmöglich ist es aber nicht - zB mit dem Firefox Bon Echo, der mir das hier ausspuckt:
Code:
GIF87aK??„??trt<:<¬ª¬ŒŽŒTVT|~|DFDœšœdbd,*,tvt<><¼Òì”’”\Z\$"$„†„LNL¤¢¤ljl424?????????????????????,????K???þ $Ždižhª®*à¾p,Ï®€5t®ÓWß‹ pH,‡6Æq9¼à?O_(bX¯X…D‚íz½Á—!-_ €ñXdh&møv«pÃßñ8âîfÂfn‚ƒ„…‚"‰Š‰s‹{‹a”—˜˜"œsžž’£ž¨®¯°"«µ ¡·¶’´¿¿¶¶¿´´Ãȷ˼¼³a6a¡&дÐ%6ÑÙ߬Ѭ	ÆååÒ"ðññsï’ïö"ûðôùƒ¯ <î)D?Ð ˆ
’@<1¢I-BÀ·1BECF‹ˆÐþSj¬À²ÂÖ/²l?‚K›"´¬ÉòeO›" ¼I èΣ;EXºTi8’pêÒjB`ê´€,DXø%¢hѬLÓr…Ð	Ìuê;%@Õ˶J%àK€Ba]ºD(X¬àÀâ‹Œ8P ¤âËç<ª?ób„˜%0q!€éÓŒS?†pAAëHøp×eÖ¤c³¾€—åÖÿê0œ¸ƒ²X¹nÝcùrÒ¦AœzñÇ!L×^štëÛ‰›&qz»„ìÚ	”¶aº´{ñ"jˆw>öɇwO½Ø’ÅE_mèeG`\aÔ·§`và ƒ§•&Þ{<(~Fð Bvh!J`Ÿƒ
Zhƒ‡Ð•GÁŠ,¶è¢‹ø9°bI/ÖÈ¢	6Úh?re?)dfi$ÄE䑹$“PFYTüÁ•Xf©å–X&`–Jr)æ˜d^é†?& æšlªA›l"çœnÎù¦t²é‡X”T’—éøéå J¨œ†J( Ð衈.Z¨;²`饘fZB?;Inhalt Captcha-SESSION: xSK30y

Wie muss ich das ganze denn jetzt ändern, damit ich das ganze zum Beispiel in eine Seite mit einem Formular einbauen kann, ohne dass die Seite und das Formular versteckt werden? Kann ich da einen allgemeineren Contenttype wählen?

mAu hat es bereits gesagt - Einbinden kannst du das über einen weiteren Aufruf in einem HTML-Dokument. Wie aber kannst du nun das Captcha überprüfen? Meistens wählt man den Umweg über eine Datenbank, in der für x Sekunden eine Captcha Zeichenkette mit einem Identifikator (zB Session-ID) gespeichert wird. Diese SID wird nun verwendet um über den gesamten Prozess der Aufrufe die gleiche Captcha-Zeichenkette benutzen zu können. In sofern würde ich deine Captcha::run() erweitern um ein Captcha::run($string). $string erhälst du aus der Datenbank, aus der du mit der SID als Index eben diesen ausliest und verwertest. Nach der Eingabe überprüfst du dann, ob $_POST['captchainput'] auch mit dem Eintrag des Captchastring in der DB übereinstimmt.
 
die überprüfung kannst du auch per COOKIE machen... die meisten BOTS können bisher keine Bots lesen und verschlüssel es ambesten... ich hab es mit blowfish gemacht und denke das der nicht zu knacken ist xD

MfG Gunah
 

Neue Beiträge

Zurück