2011-05-23 51 views
5

Estoy escribiendo un sistema de autenticación para mi sitio y quiero asegurarme de que estoy protegido contra la inyección de SQL. Estoy usando 'mysql_real_escape_string', pero esto borra completamente la cadena. el nombre de usuario es algo así como 'Damo', pero después de ejecutar la función se ha ido.mysql_real_escape_string borrando cadena completa

¿Qué estoy haciendo mal? (Funciona bien sin mysql_real_escape_string)

$user_name = $_POST["username"]; 
$md5 = md5($_POST["password"]); 

$user_name = mysql_real_escape_string($user_name); 


$login = $query->GetSingleQuery("--SINGLE","SELECT user_name, id FROM url_users WHERE user_name='".$user_name."' and user_password='".$md5."';",array("user_name","id")); 
+0

¿Tiene citas mágicas activadas? (get_magic_quotes_gpc()) –

Respuesta

7

mysql_real_escape_string requiere una conexión. Se supone que la conexión se ha creado como parte de la misma biblioteca.

Sin embargo, no es mysql_real_escape_string basadas en OO, y ya está claramente utilizando alguna otra biblioteca para su OO $query (¿qué es?). Por lo tanto, mysql_real_escape_string no puede "ver" la conexión que está utilizando y, por lo tanto, no puede funcionar.

Si activa los informes de errores (y realmente debería), debería ver un E_WARNING generado para esto. Por el contrario, sugiero mysql_escape_string. Su uso puede no coincidir con el conjunto de caracteres de su conexión de base de datos, pero lo hará por el momento, y no requiere una conexión. Idealmente, utilice la función de escape proporcionada a través de la biblioteca de DB que está en realidad usando.

+0

Soy un idiota. mysql_real_escape_string ya está incluido en la clase de conexión SQL que estoy usando. Gracias por su contribución, me hizo mirar en el lugar correcto. – Damo

+0

@Damo: No hay problema. Utilice absolutamente la función proporcionada en la biblioteca que está utilizando; se dará cuenta de la conexión que ha creado y, por lo tanto, funcionará correctamente. ¡Y activa el informe de errores! ¡Buena suerte! –

-1

tratar este fragmento, creo que su mal sobre lo que está sucediendo actully.

$user_name = $_POST["username"]; 
echo 'before: '.$user_name; 
$user_name = mysql_real_escape_string($user_name); 
echo 'after: '.$user_name; 
Cuestiones relacionadas