Hallo zusammen
Ich hab im Netzt die Folgende Funktion gefunden die vor MySQL Injections schützen soll.
Was ich dabei nicht verstehe ist, warum die Query unbedingt mit sprintf() Formartiert werden muss obwohl das eintragen in die DB auch ohne diese Formartierung geht und warum das erst ab dem 2. Parameter vor SLQ Injections schützen soll?
Mit dem sprintf() wird das zwar als String (reiner Text bei %s) bzw. Integer (bei %d) angesehen jedoch wird das was in $query da ankommt ja mit ysql_real_escape_string schon alles Maskiert. Deswegen versteh ich nicht warum unbedingt nochmal das Formartieren mit sprintf() notwendig sein soll.
Kann mir das bitte einer erklären?
Ich hab im Netzt die Folgende Funktion gefunden die vor MySQL Injections schützen soll.
PHP-Code:
function db_query($query){
$args=func_get_args();
$vargs=array();
for($i=1;$i<func_num_args();$i++) {
if(get_magic_quotes_gpc()) {
$args[$i]=stripslashes($args[$i]);
}
$vargs[]=mysql_real_escape_string($args[$i]);
}
$query=vsprintf($query,$vargs);
$res=mysql_query($query);
return($res);
}
Bsp. Abfrage:
db_query('SELECT * FROM %s WHERE `%s`=%d','user','id',123456);
Mit dem sprintf() wird das zwar als String (reiner Text bei %s) bzw. Integer (bei %d) angesehen jedoch wird das was in $query da ankommt ja mit ysql_real_escape_string schon alles Maskiert. Deswegen versteh ich nicht warum unbedingt nochmal das Formartieren mit sprintf() notwendig sein soll.
Kann mir das bitte einer erklären?
Kommentar