¿Qué es la inyección SQL?

Es una vulnerabilidad informática en la que se introduce código SQL malintencionado en los campos de un formulario.

Veámoslo con un ejemplo:

1) Tengo una sentencia SQL dentro de mi código, tal como esta:

$query = "SELECT * FROM Usuarios WHERE nombre = '$nombreUsuario' ";

$resul = mysql_query($query);

donde en nombreUsuario tengo el valor que recibido del usuario en el formulario.

2)Si el usuario, introduce "Pepito", la sentencia que ejecutará la aplicación será:


$query = "SELECT * FROM Usuarios WHERE nombre = 'Pepito' ";

que se ejecutará sin problemas.

3) Imaginemos ahora que el usuario tiene un poco más de mala idea e introduce esto en el campo nombreUsuario del formulario :


"Pepito'; DROP TABLE Usuarios; SELECT * FROM Facturas";

4) La sentencia que ejecutará la aplicación será:


$query = "SELECT * FROM Usuarios WHERE nombre = 'Pepito'; DROP TABLE Usuarios; SELECT * FROM Facturas" ;

De forma que está eliminando datos de nuestra base de datos, y accediendo a datos para los cuales en un principio no debería de tener permiso.

¿Cómo lo solucionamos?

PHP nos facilita la función mysql_real_escape_string(string $cadena_no_escapada [, resource $id_enlace].

Usando esta función, nuestra consulta quedaría de la forma:


$query = sprintf("SELECT * FROM Usuarios WHERE nombre = '%s' ", mysql_real_escape_string($nombreUsuario) );

Puedes encontrar más información sobre este tema en la Wikipedia, en el siguiente enlace:

 http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL