Hallo Leute,
ich bin grade etwas am Verzweifeln...verfluchtes Escaping!
Ziel des Scriptes ist es, Strings UND Arrays sauber vor SQL-Injections zu schützen.
Dann überprüf ich ob magic_quotes_gpc auf ON gestellt ist und mach es dann rückgängig.
mysql_real_escape_string wird dann drüber gehauen und es sollte eigentlich alles funktionieren.
Hier ist das Script:
Leider funzt das ganze nicht so wie ich mir das vorstell:
1. Der String ist nicht richtig / nur teilweise escaped (s. an der Ausgabe des Strings)
2. Wenn ich mit die FUnktion mit einem Array aufrufe, kommt am Ende (s. Ausgabe) etwas anderes heraus, als wenn ich ein String des Arrays alleine escape...
Kennt sich jemand mit der Thematik aus? Ich hab echt keine Lust mehr und bin kurz davor mich nur auf magic_quotes_gpc zu verlassen.
Liebe Grüße
Alex
ich bin grade etwas am Verzweifeln...verfluchtes Escaping!
Ziel des Scriptes ist es, Strings UND Arrays sauber vor SQL-Injections zu schützen.
Dann überprüf ich ob magic_quotes_gpc auf ON gestellt ist und mach es dann rückgängig.
mysql_real_escape_string wird dann drüber gehauen und es sollte eigentlich alles funktionieren.
Hier ist das Script:
PHP-Code:
<?php
//Zur DB wurde bereits connectet
function demaskieren($variable) // entfernt bereits durch magic_quotes_gpc hinzugefügte Maskierungen wieder (auch bei Arrays!)
{ // Nutzung der Funktion nur in Verbindung mit clean_string()!
if (is_string($variable))
$variable = stripslashes($variable);
else
{
if (is_array($variable))
{
foreach($variable AS $key => $value)
demaskieren($variable[$key]);
}
}
return $variable;
}
function clean_string($string) // Nutzung nur direkt vor dem Speichern in der DB! Maskiert alle Strings (auch Arrays!)
{
if (get_magic_quotes_gpc())
{
$string = demaskieren($string);
}
if (is_string($string))
$string = mysql_real_escape_string($string);
else
{
if (is_array($string))
{
foreach($string AS $key => $value)
$string[$key] = mysql_real_escape_string($string[$key]);
}
}
return str_replace("\\n", "\n", $string); // lässt \n als einziges unmaskiertes Zeichen in der DB stehen
}
$wert[0] = 'xx \\n xx \\ xx \" xx \ xx 1';
$wert[1] = 'xx \\n xx \\ xx \" xx \ xx 2';
$wert[2] = 'xx \\n xx \\ xx \" xx \ xx 3';
echo $wert[0];
echo "<br />";
echo clean_string($wert[0])."<br />";
$wert = clean_string($wert);
echo $wert[0]."<br />";
echo $wert[1]."<br />";
echo $wert[2]."<br />";
?>
1. Der String ist nicht richtig / nur teilweise escaped (s. an der Ausgabe des Strings)
2. Wenn ich mit die FUnktion mit einem Array aufrufe, kommt am Ende (s. Ausgabe) etwas anderes heraus, als wenn ich ein String des Arrays alleine escape...
Kennt sich jemand mit der Thematik aus? Ich hab echt keine Lust mehr und bin kurz davor mich nur auf magic_quotes_gpc zu verlassen.
Liebe Grüße
Alex
Kommentar