Ver Mensaje Individual
  #9 (permalink)  
Antiguo 04/12/2010, 10:57
bluesnt
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: mysql_real_escape_string

Buen día, ampliando mi respuesta...

mysql_real_escape_string se utiliza para escapar como su mismo nombre lo indica, algunos caracteres que pueden ser peligrosos en la hora de inyectar datos en tus consultas sql mediante php.


Un claro ejemplo de lo que se podría evitar es el siguiente:

En el script para ejecutar la consulta sql se pasan datos mediante la variable $_GET..
Código PHP:
Ver original
  1. mysql_query("UPDATE usuarios SET nombre = '$_GET[nombre]' WHERE id = $id");

En la inteligencia que cualquier persona puede cambiar la variable $_GET en la petición de la url. El resultado seria fatal si el usuario se da cuenta de la vulnerabilidad, algo como esto:

[URL="http://localhost/index.php?nombre=';DELETE FROM"]http://localhost/index.php?nombre=';DROP TABLE usuarios;SELECT * FROM usuarios[/URL]

El resultado seria que el usuario podría modificar a su gusto la consulta sql pudiendo borrar datos, o alterandolos.

La funcion mysql_real_escape_string escaparia la comilla simple de la variable GET, quedando la consulta así:
Código SQL:
Ver original
  1. UPDATE usuarios SET nombre = '\\';DROP TABLE usuarios;SELECT * FROM usuarios' WHERE id = $id

Mi recomendación adicional es validar los datos para que no afecte el funcionamiento de su sistema un dato incongruente a lo que debería estar plasmado.

Si no se usara el mysql_real_escape_string entonces la consulta quedaría así:

Código SQL:
Ver original
  1. UPDATE usuarios SET nombre = '';DROP TABLE usuarios;SELECT * FROM usuarios WHERE id = $id