¿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: