ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
425
425
EMPFEHLEN
-
Hallo zusammen, ich bin neu hier und habe natürlich schon eine Frage!
Also:
Ich möchte mein Gästebuch mit einer Captchaeinbindung absichern.
GB ist mit anhängiger Datenbank erstellt (alles mit Dreamweaver).
Nun möchte ich dieses Captcha einbinden. Habe mir natürlich Billies Programm vorgenommen und getestet. Seine Schriften habe ich durch meine im Rootverzeichnis vorhandene Schriften ersetzt.PHP-Code:<form name="" action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="POST" enctype="text/html">
<p><span class="bold">Ihr Name:</span><br />
<input type="text" name="name" value="" size="50" maxlength="150" />
</p>
<p><span class="bold">Ihre E-Mail-Adresse:</span><br />
<input type="text" name="email" value="" size="50" maxlength="150" />
</p>
<p><span class="bold">Gästebucheintrag:</span><br />
<textarea name="eintrag" rows="10" cols="50"></textarea>
</p>
<input type="Submit" name="" value="speichern" />
</form>
<p class="bold">
<?php
array_walk ( $_POST, 'eingabebereinigen' );
array_walk ( $_GET, 'eingabebereinigen' );
array_walk ( $_REQUEST, 'eingabebereinigen' );
function eingabebereinigen(&$value, $key)
{
$value = strip_tags($value, '<p><br /><b><strong>');
$value = htmlspecialchars($value, ENT_QUOTES);
$value = trim($value);
}
if ( $_POST['name'] != "" )
if ( $_POST['eintrag'] != "" )
$sql = " INSERT INTO gaestebuch ";
$sql .= " SET ";
$sql .= " name ='". $_POST['name'] ."', ";
$sql .= " email ='". $_POST['email'] ."', ";
$sql .= " datum ='". date("Y-m-d H:i:s") ."', ";
$sql .= " eintrag='". $_POST['eintrag'] ."' ";
?>
<?php
require_once ('konfiguration.php');
$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link )
{
}
$db_sel = mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
echo '<p><span class="bold">Bitte füllen Sie das Formular vollständig aus</span></p>';
}
else
echo '<p class="bold"><a href="gaestebuch.php">Gästebuch anzeigen</a></p>';
exit;
?>
Ich bekomme NUR Hyroglyphen als Ergebnis.
Nun meine Frage: Wo könnte die Ursache liegen?
Ich hoffe, da ist jemand, der mir weiterhelfen kann! Vorab schon einmal DANKE!
LG Astra
-
Es fehlt der Captcha-relevante Teil.
Was soll "Billies Programm" sein?
-
Ups, sorry! Ich dachte, es liegt grundsätzlich an meinem Code. Hier also das abgeänderte Skript von Billie:
bis auf die Schriften "arial und acidd" habe ich nichts verändert. wenn ich das nun im Browser anschaue bekomme ich Folgendes:PHP-Code:<?php
$CAPTCHA_LENGTH = 5; // Länge der Captcha-Zeichenfolge, hier fünf Zeichen
$FONT_SIZE = 18; // Schriftgröße der Zeichen in Punkt
$IMG_WIDTH = 170; // Breite des Bild-Captchas in Pixel
$IMG_HEIGHT = 60; // Höhe des Bild-Captchas in Pixel
// Liste aller verwendeten Fonts
$FONTS[] = './ttf/arial.\ttf';
$FONTS[] = './ttf/actionj.\ttf';
$FONTS[] = './ttf/acidd.\ttf';
// Unser Zeichenalphabet
$ALPHABET = array('A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'Q', 'J', 'K', 'L', 'M', 'N',
'P', 'R', 'S', 'T', 'U', 'V', 'Y',
'W', '2', '3', '4', '5', '6', '7');
// Wir teilen dem Browser mit, dass er es hier mit einem JPEG-Bild zu tun hat.
header('Content-Type: image/jpeg', true);
// Wir erzeugen ein leeres JPEG-Bild von der Breite IMG_WIDTH und Höhe IMG_HEIGHT
$img = imagecreatetruecolor($IMG_WIDTH, $IMG_HEIGHT);
// Wir definieren eine Farbe mit Zufallszahlen
// Die Farbwerte sind durchgehend und absichtlich hoch (200 - 256) gewählt,
// um eine "leichte" Farbe zu erhalten
$col = imagecolorallocate($img, rand(200, 255), rand(200, 255), rand(200, 255));
// Wir füllen das komplette Bild mit der zuvor definierten Farbe
imagefill($img, 0, 0, $col);
$captcha = ''; // Enthält später den Captcha-Code als String
$x = 10; // x-Koordinate des ersten Zeichens, 10 px vom linken Rand
for($i = 0; $i < $CAPTCHA_LENGTH; $i++) {
$chr = $ALPHABET[rand(0, count($ALPHABET) - 1)]; // ein zufälliges Zeichen aus dem definierten Alphabet ermitteln
$captcha .= $chr; // Der Zeichenfolge $captcha das ermittelte Zeichen anfügen
$col = imagecolorallocate($img, rand(0, 199), rand(0, 199), rand(0, 199)); // einen zufälligen Farbwert definieren
$font = $FONTS[rand(0, count($FONTS) - 1)]; // einen zufälligen Font aus der Fontliste FONTS auswählen
$y = 25 + rand(0, 20); // die y-Koordinate mit einem Mindestabstand plus einem zufälligen Wert festlegen
$angle = rand(0, 30); // ein zufälliger Winkel zwischen 0 und 30 Grad
/*
* Diese Funktion zeichnet die Zeichenkette mit den
* gegeben Parametern (Schriftgröße, Winkel, Farbe, TTF-Font, usw.)
* in das Bild.
*/
imagettftext($img, $FONT_SIZE, $angle, $x, $y, $col, $font, $chr);
$dim = imagettfbbox($FONT_SIZE, $angle, $font, $chr); // ermittelt den Platzverbrauch des Zeichens
$x += $dim[4] + abs($dim[6]) + 10; // Versucht aus den zuvor ermittelten Werten einen geeigneten Zeichenabstand zu ermitteln
}
imagejpeg($img); // Ausgabe des Bildes an den Browser
imagedestroy($img); // Freigeben von Speicher
?>
����JFIF��>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality ��C $.' ",#(7),01444'9=82<.342��C 2!!22222222222222222222222222222222222222222222222222��<�"�� ���}AQa"q2���#B��R��$3br� %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�������������������������������������������������� ������������������������� ���wAQaq"2�B���� #3R�br� $4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz����������������������������������������������� ��������������������������� ?�(���0��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�� (��(��(��(��(��(��(��(��(��(��(��(��(��(��(��
Reicht das für eine Fehlernalyse?
Danke nochmals!
LG Astra
-
Ich würde erstmal error_reporting auf E_ALL setzen. Zudem finde ich dieses Programm nicht sehr gelungen. Ich würde es mit einer Captcha-Klasse versuchen. Zudem finde ich nirgendwo in deinem Code die Stelle, wo das Captcha eingebunden wurde. Hast du die captcha.php mal ohne das drum herum aufgerufen?
MfG, Andy
-
Ok, ich habe nun ErrorReporting erhalten:
Warning: Cannot modify header information - headers already sent by (output started at /homepages/...../htdocs/captcha.php :9) in /homepages/...../htdocs/captcha.php on line 29
Zeile 29: header('Content-Type: image/jpeg', true);
Warning: imagettftext() [function.imagettftext]: Could not find/open font in /homepages/...../htdocs/captcha.php on line 62
Zeile 62: imagettftext($img, $FONT_SIZE, $angle, $x, $y, $col, $font, $chr);
Warning: imagettfbbox() [function.imagettfbbox]: Could not find/open font in /homepages/...../htdocs/captcha.php on line 64
Zeile 64: $dim = imagettfbbox($FONT_SIZE, $angle, $font, $chr);
_____________________________________________
Das gab es dabei!
Ich habe eine Capthcha.php nur mit dem abgeänderten Code von Billie erstellt und getestet. In mein Script eingebaut habe ich sie noch nicht.
Ich glaube, ich habe einen grundsätzlichen Denkfehler bei der Funktionsweise des Captchas.
Tut mir leid, aber im Moment stehe ich wirklich brutal auf der Leitung.
PS: auch wenn ich das nun nicht hinbekomme, ich möchte es gerne verstehen!
LG Astra
-
Etwas anderes: Deine eingabebereinigen()-Funktion eignet sich nicht als Schutz vor SQL-Injektionen. Verwende dafür die mysql_real_escape_string()-Funktion.
Markus Wulftange
-
Ja, danke! Auch wenn meine eigentliche Frage leider noch ohne Antwort ist!
LG Astra
-
Dann beseitige erst mal die genannte Fehler der Reihe nach, wie sie gemeldet wurden.
Markus Wulftange
-
Hi Markus,
also, denn schau doch bitte mal!
Ist das so richtig? Ich hoffe mal!PHP-Code:<?php
mysql_real_escape_string ( $_POST, 'eingabebereinigen' );
mysql_real_escape_string ( $_GET, 'eingabebereinigen' );
mysql_real_escape_string( $_REQUEST, 'eingabebereinigen' );
function eingabebereinigen(&$value, $key)
{
$value = strip_tags($value, '<p><br /><b><strong>');
$value = htmlspecialchars($value, ENT_QUOTES);
$value = trim($value);
}
?>
Meine Captcha.php habe ich übrigens hinbekommen, zwar nicht mit dem zuvor probierten Billie-Script.
Bei der Einbindung funktioniert es auch schon ganz gut, nur noch nicht ganz fehlerfrei,
Ich bekomme nun die Fehlermeldung, dass sqlPHP-Code:<form name="" action="<?php echo $_SERVER['PHP_SELF']; ?>"
method="POST" enctype="text/html">
<p><span class="bold">Ihr Name:</span><br />
<input type="text" name="name" value="" size="50" maxlength="150" />
</p>
<p><span class="bold">Ihre E-Mail-Adresse:</span><br />
<input type="text" name="email" value="" size="50" maxlength="150" />
</p>
<p><span class="bold">Gästebucheintrag:</span><br />
<textarea name="eintrag" rows="10" cols="50"></textarea>
</p>
<img src="CaptchaCheckImages.php" alt="captcha" />
<input id="security_code" name="security_code" type="text" />
<input type="Submit" name="" value="speichern" />
</form>
<?php
mysql_real_escape_string ( $_POST, 'eingabebereinigen' );
mysql_real_escape_string ( $_GET, 'eingabebereinigen' );
mysql_real_escape_string( $_REQUEST, 'eingabebereinigen' );
function eingabebereinigen(&$value, $key)
{
$value = strip_tags($value, '<p><br /><b><strong>');
$value = htmlspecialchars($value, ENT_QUOTES);
$value = trim($value);
}
?>
<?php
session_start();
if(($_SESSION['security_code'] == $_POST['security_code']) && (!empty($_SESSION['security_code'])) )
if ( $_POST['name'] != "" )
if ( $_POST['eintrag'] != "" )
{
$sql = " INSERT INTO gaestebuch ";
$sql .= " SET ";
$sql .= " name ='". $_POST['name'] ."', ";
$sql .= " email ='". $_POST['email'] ."', ";
$sql .= " datum ='". date("Y-m-d H:i:s") ."', ";
$sql .= " eintrag='". $_POST['eintrag'] ."' ";
unset($_SESSION['security_code']);
} else {
echo 'Bitte versuchen Sie es noch einmal!';
}
?>
<?php
require_once ('konfiguration.php');
$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link )
$db_sel = mysql_select_db( MYSQL_DATENBANK )
or die("Auswahl der Datenbank fehlgeschlagen");
// ausführen des mysql-Befehls
$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
echo '<p><span class="bold">Bitte füllen Sie das Formular vollständig aus</span></p>';
}
else
echo '<p class="bold"><a href="gaestebuch.php">Gästebuch anzeigen</a></p>';
exit;
?>
($db_erg = mysql_query( $sql );
nicht definiert sei. (Letzter Teil in php)
Und noch ein Fehler.
Der Hinweis: Bitte füllen Sie das Formular vollständig aus, steht schon beim 1. Seitenaufruf dort. Er sollte erst dort stehen, wenn das Formular unvollständig abgesendet wurde. (Auch im letzten Teil)
Der Vollständigkeit halber gebe ich hier noch die captcha-php an:
Wie bekomme ich nun die noch vorhandenen Fehler weg und ist der Rest jetzt ok? Vielen lieben Dank im Voraus!PHP-Code:<?php
session_start();
class CaptchaCheckImages {
var $font = 'arialf';
function generateCode($characters) {
/* list all possible characters, similar looking characters and vowels have been removed */
$possible = '23456789bcdfghjkmnpqrstvwxyz';
$code = '';
$i = 0;
while ($i < $characters) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
function CaptchaCheckImages($width='150',$height='40',$characters='6') {
$code = $this->generateCode($characters);
/* font size will be 75% of the image height */
$font_size = $height * 0.75;
$image = imagecreate($width, $height) or die('Cannot initialize new GD image stream');
/* set the colours */
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 20, 40, 100);
$noise_color = imagecolorallocate($image, 100, 120, 180);
/* generate random dots in background */
for( $i=0; $i<($width*$height)/3; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
}
/* generate random lines in background */
for( $i=0; $i<($width*$height)/150; $i++ ) {
imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
}
/* create textbox and add text */
$textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
/* output captcha image to browser */
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
$_SESSION['security_code'] = $code;
}
}
$width = isset($_GET['width']) && $_GET['width'] < 600 ? $_GET['width'] : '150';
$height = isset($_GET['height']) && $_GET['height'] < 200 ? $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > 2 ? $_GET['characters'] : '6';
$captcha = new CaptchaCheckImages($width,$height,$characters);
?>
LG Astra
-
Was die Sicherheit betrifft, reicht mysql_real_escape_string() alleine aus, um Werte für die Nutzung in MySQL-Abfragen vorzubereiten. Schau dir lieber mal an, was genau die einzelnen Funktionen machen.
Markus Wulftange
Ähnliche Themen
-
Probleme mit Captcha
Von julchen im Forum PHPAntworten: 0Letzter Beitrag: 20.11.09, 09:03 -
Captcha problem
Von BigR16 im Forum PHPAntworten: 11Letzter Beitrag: 14.01.09, 09:58 -
[JSP] Captcha
Von SeeSharpNewBee im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 13.02.08, 14:26 -
Captcha sicher?
Von ThaNewbie im Forum PHPAntworten: 4Letzter Beitrag: 17.05.07, 11:37 -
CAPTCHA Problem
Von Nepheus im Forum PHPAntworten: 7Letzter Beitrag: 31.03.07, 15:29





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren