Cómo evitar inyección SQL en PHP
¿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