Hallo,
ich als leihe versuche mein wissen zu erweitern und meine abfragen sicherer zu machen.
im netz habe ich viele erläuterungen gefunden, steige da aber nur schwer durch.
der folgende code arbeitet nicht mit der funktion mysql_real_escape_string. jedoch werden alle wichtigen "eingänge" maskiert (get, post, cookie).
ich lese jetzt aber überall, dass man auf mysql_real_escape_string nicht verzichten darf, dies tue ich aber wohl bisher. deshalb habe ich die folgende funktion mit eingebaut.
Wenn nun aber mal ein paar anfragen teste (erstmal über get) sieht dies wie folgt aus.
wenn ich also mysql_real_escape_string so nutze, werden die werte 3fach mit einem backslash versehen.
muss ich mysql_real_escape_string also garnicht benutzen oder wende ich diesen code einfach falsch an?
kann ich nicht eigentlich das erste codebeispiel um mysql_real_escape_string erweitern, so dass ich die secure_db garnicht aufrufen muss?
bitte schaut mal drüber, ich und mein derzeitiges wissen ist einfach zu beschränkt um es zu 100% zu verstehen oder sicher zu sein.
grüße
ich als leihe versuche mein wissen zu erweitern und meine abfragen sicherer zu machen.
im netz habe ich viele erläuterungen gefunden, steige da aber nur schwer durch.
der folgende code arbeitet nicht mit der funktion mysql_real_escape_string. jedoch werden alle wichtigen "eingänge" maskiert (get, post, cookie).
PHP-Code:
// Sucht und erstetzt (böse) Zeichen
function secure($str)
{
$str = trim($str);
$str = str_replace("#","#",$str);
$str = str_replace("(","(",$str);
$str = str_replace(")",")",$str);
$str = str_replace("<","<",$str);
$str = str_replace(">",">",$str);
return $str;
}
// Get-Variable filtern mit der Funktion secure
for(reset($_GET); list($key,$value) = each($_GET);)
$_GET[$key] = secure($value);
// Setzt ein Backslash vor quote in $_POST, $_GET and $_COOKIE Variablen sofern magic_quotes_gpc ausgeschaltet ist
if(!get_magic_quotes_gpc())
{
foreach($_GET AS $key => $value)
$_GET[$key] = addslashes($value);
foreach($_POST AS $key => $value)
{
if(is_array($_POST[$key]))
{
foreach($_POST[$key] AS $key1 => $value1)
$_POST[$key][$key1] = addslashes($value1);
}
else
{
$_POST[$key] = addslashes($value);
}
}
foreach($_COOKIE AS $key => $value)
{
if(is_array($_COOKIE[$key]))
{
foreach($_COOKIE[$key] AS $key1 => $value1)
$_COOKIE[$key][$key1] = addslashes($value1);
}
else
{
$_COOKIE[$key] = addslashes($value);
}
}
}
PHP-Code:
// SQL Abfragen sicher machen
function secure_db($value)
{
global $db_connect;
// stripslashes, falls nötig
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// quotieren, falls kein integer
if (!is_numeric($value))
{
$value = mysql_real_escape_string($value, $db_connect);
}
return $value;
Wenn nun aber mal ein paar anfragen teste (erstmal über get) sieht dies wie folgt aus.
PHP-Code:
// get hat den wert -- \x00 -- also (?test=\x00)
echo secure_db($_GET['test']).' <- MIT der secure_db funktion (mysql_real_escape_string)<br><br>';
echo $_GET['test'].' <- OHNE die secure_db funktion (mysql_real_escape_string)<br><br>';
// die ausgabe sieht dann so aus
// \\\\x00 <- MIT der secure_db funktion (mysql_real_escape_string)
// \\x00 <- OHNE die secure_db funktion (mysql_real_escape_string)
muss ich mysql_real_escape_string also garnicht benutzen oder wende ich diesen code einfach falsch an?
kann ich nicht eigentlich das erste codebeispiel um mysql_real_escape_string erweitern, so dass ich die secure_db garnicht aufrufen muss?
bitte schaut mal drüber, ich und mein derzeitiges wissen ist einfach zu beschränkt um es zu 100% zu verstehen oder sicher zu sein.
grüße
Kommentar