Gästebuch so sicher genug?

funnyzocker

Erfahrenes Mitglied
Hallo.
Da mein Gästebuch (was ich komplett selber geschrieben habe) immer mit Spam zugemüllt wurde habe ich den Code nun mal verändert.
Mal die frage an unsere Experten hier im Forum.
Meint ihr ich habe so alles soweit abgesichert das kein Fremder Code in die db gespeichert wird? Ausserdem habe ich ein Rechencaptcha eingebaut.
PHP:
session_start();
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
   $char = substr($string, $i, 1);
   $keychar = substr($key, ($i % strlen($key))-1, 1);
   $char = chr(ord($char)+ord($keychar));
   $result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "29jfkd921");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if(isset($_SESSION['rechen_captcha_spam']) AND $sicherheits_eingabe == $_SESSION['rechen_captcha_spam']){
unset($_SESSION['rechen_captcha_spam']); 
//Captcha Ende
$ip = $_SERVER['REMOTE_ADDR'];
$datum = date("Y-m-d H:i:s");
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$text = strip_tags($_POST['text']);
switch($send) {
        case $_POST['name'] !="":
             echo"Bitte den Namen eingeben";
             echo"<a href=index.php?do=gb&aktion=form>Zurück</a>";
             break 1;
        case $_POST['email'] !="":
             echo"Bitte die Emailadresse eingeben";
             echo"<a href=index.php?do=gb&aktion=form>Zurück</a>";
             break 1;
        case $_POST['text'] !="":
             echo"Bitte einen Text eingeben";
             echo"<a href=index.php?do=gb&aktion=form>Zurück</a>";
             break 1;
        default:
if (!ereg("^.+@.+\\..+$", $_POST[email]))
{
echo "<h2>Die eingegebene Emailadresse ist nicht korrekt!<br>Bitte auf das korrekte Format ( name@domain.endung )achten";

}
else
{
$sql = "INSERT INTO gb
                (gb_name, gb_email, gb_ip, gb_text, gb_datum)
            VALUES
               ('".$name."',
                '".$email."',
                '".$ip."',
                '".$text."',
                '".$datum."')";
$eintragen = mysql_query($sql);
//Mail senden zur Überprüfung
$sender = "gb@bilder-gigant.de";
        $empfaenger = "webmaster@bilder-gigant.de";
        $betreff = "Neuer Eintrag in das Gästebuch";
        $text = "Hallo Webmaster.
        Soeben wurde ein neuer Eintrag in das Gästebuch vorgenommen";
           mail($empfaenger, $betreff, $text, "From: $sender");
echo"Vielen Dank für Ihren Gästebucheintrag";
}
}
}

Nach meiner Meinung müsste doch das GB so eigentlich gegen alles abgesichert sein oder?

Über Verbesserungsvorschläge werde ich auch nicht meckern :)
 
Ich gehe es mal von oben nach unten durch:
  • Der beim Captcha einzugebende Text muss nicht verschlüsselt werden, wenn er in der Sitzung gespeichert wird. Denn auf diesen Wert kann (normalerweise) von Außen nicht zugegriffen werden.
  • Aus dem $_POST['text']-Variablenwert werden zwar vorkommende Tags entfernt, die bei einer MySQL-Datenbankabfrage weit aus kritischeren MySQL-Metazeichen werden jedoch nicht maskiert/entfernt.
  • Wo wird die Variable $send definiert und welchen Wert hat sie beziehungsweise wird erwartet?
 
Hi,

Gumbo meinte mit dem escapen den eigentlichen GB-Eintrag - "$text" sollte also genauso escaped werden wie der "$name" und "$email".

LG
Andy
 
Zurück