Hallo beisammen,
auf meinem Server ist magic_quotes_gpc on.. Nun habe ich mich daran gemacht, den Text dahingehend noch zusaetzlich vor dem INSERT zu filtern.
Also habe ich eine Funktion in meiner functions.php dafür angelegt:
Ich habe ein kleineres Messagesystem geschrieben, welches (zu meiner Verwunderung) sogar funktioniert hat.. Jedoch gibt es dieses Problem:
Ich sende Text an User X:
Dieser erhaelt:
Waere alss meine Frage, warum ist das so? Ich versteh's nicht..
Ich habe auch wirklich keine Ahnung, an welcher Stelle im Code DAS liegen mag..
Ich poste mal alles, was zum INSERT gehoert:
Normalerweise muesste der Text sauber gefiltert eingetragen werden, so wie es z.B. mit einem aehnlichen Code beim "Newsbeitraege verfassen" oder "Kommentare verfassen" auch funktioniert?! (Newsscript)
Ich korrigiere mich: Ich habe gerade bemerkt, dass es dort ebenfalls nicht funktioniert!
Wenn ich das richtig verstanden habe, reicht es doch, die Variablen vor dem INSERT dadurch zu filtern, und dann kann ich sie ganz normal mit $row->text ausgeben, oder?
Desweiteren frage ich mich, ob clean_it UEBERHAUPT irgendetwas macht?! Sonst waeren die sql Injections ein wenig gefaehrlich :O
Gueße
disturbedchick
P.S. Ich bin noch am lernen, wie man sieht.. Seid also nachsichtig mit mir, falls ich hier den totalen Mist gemacht habe
auf meinem Server ist magic_quotes_gpc on.. Nun habe ich mich daran gemacht, den Text dahingehend noch zusaetzlich vor dem INSERT zu filtern.
Also habe ich eine Funktion in meiner functions.php dafür angelegt:
PHP-Code:
function clean_it($dirty){
if (get_magic_quotes_gpc()) {
$clean = mysql_real_escape_string(stripslashes(htmlspecialchars($dirty)));
}else{
$clean = mysql_real_escape_string(htmlspecialchars($dirty));
}
return $clean;
}
Ich habe ein kleineres Messagesystem geschrieben, welches (zu meiner Verwunderung) sogar funktioniert hat.. Jedoch gibt es dieses Problem:
Ich sende Text an User X:
Zeilenumbruch folgt
"Anfuehrugszeichen"
'usw'
"Anfuehrugszeichen"
'usw'
Dieser erhaelt:
Zeilenumbruch folgt\r\n\r\n\\\"Anfuehrugszeichen\\\" \r\n\r\n\\\'usw\\\'
Ich habe auch wirklich keine Ahnung, an welcher Stelle im Code DAS liegen mag..
Ich poste mal alles, was zum INSERT gehoert:
PHP-Code:
if($_GET['open'] == "senden") {
$empfaenger_gueltig = false;
$an = $_POST['an'];
$betreff = $_POST['betreff'];
$text = clean_it($_POST['text']);
$_SESSION['mail_text'] = $text;
$_SESSION['mail_an'] = $an;
$_SESSION['mail_betreff'] = $betreff;
if($an != "")
if($betreff != "")
if($text != "") {
// Frage ab
$sql = "SELECT id,username,email FROM user";
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
if($row->id == $an || $row->username == $an) {
// dann empfaenger ok
$empfaenger_gueltig = true;
$empfaenger_id = $row->id;
$mail = $row->email;
}
if($empfaenger_gueltig) {
if($empfaenger_id != $user_id){
$sql = "INSERT INTO messages (von, an, betreff, text, gelesen, loeschsender, loeschempfaenger) VALUES
('".clean_it($user_id)."','".clean_it($empfaenger_id)."','".clean_it($betreff)."','".clean_it($text)."',0,0,0)";
// Wenn Insert erfolgreich
if(mysql_query($sql)) {
echo "Nachricht verschickt";
// Destroy all Sessions
unset($_SESSION['mail_text']);
unset($_SESSION['mail_an']);
unset($_SESSION['mail_betreff']);
} //andernfalls Fehlermeldungen
else echo "..";
}
else echo "..";
}
else echo "..";
}
else echo "..";
else echo "..";
}
Ich korrigiere mich: Ich habe gerade bemerkt, dass es dort ebenfalls nicht funktioniert!
Wenn ich das richtig verstanden habe, reicht es doch, die Variablen vor dem INSERT dadurch zu filtern, und dann kann ich sie ganz normal mit $row->text ausgeben, oder?
Desweiteren frage ich mich, ob clean_it UEBERHAUPT irgendetwas macht?! Sonst waeren die sql Injections ein wenig gefaehrlich :O
Gueße
disturbedchick
P.S. Ich bin noch am lernen, wie man sieht.. Seid also nachsichtig mit mir, falls ich hier den totalen Mist gemacht habe

Kommentar