Efectivamente, tienes que usar mysql_real_escape_string() a partir de PHP 5.3 para evitar los ataques SQL injection. No sé si será tu problema, pero en el manual de PHP en la función mysql_real_escape_string() explican que si tu server tiene habilitada magic_quotes_gpc, tienes que hacer antes de mysql_real_escape_string() una llamada a stripslashes(), para evitar ese escape doble de los caracteres que comentas. Puedes saber si tienes activado el flag magic_quotes_gpc haciendo un phpinfo(). El código para escapar un string te quedaría así: $cadena = mysql_real_escape_string (stripslashes($_POST['variablecadena']));
Escapado de string doble para seguridad en PHP
Me estoy encontrando con un problema en PHP cuando intento escapar un string para evitar ataques por inyección SQL (SQL Injection Attacks) al enviar cadenas que quiero guardar en base de datos MySQL. Estoy probando la función mysql_escape_string() y me he dado cuenta que debo utilizar mysql_real_escape_string(), pero con ambas me encuentro que el string que me escapa aparece doblemente escapado. Es difícil de explicar pero parece como si las cadenas tuvieran todas escapadas el caracter contrabarra y hace que las comillas y cosas similares tengan una contrabarra (backslash) antes. Por favor, podrían indicarme cuál es el modo de proteger una cadena en PHP para evitar un posible ataque por inyección SQL??? (para mysql).