SQL injection ¿que es y como evitarlo?
31 de Mayo de 2011La inyección de SQL (o en inglés SQL injection) es una técnica de inyección de código que se aprovecha de una vulnerabilidad de seguridad en una aplicación o en una base de datos.
La vulnerabilidad está presente cuando en la parte del código SQL de una aplicación se produce el filtrado incorrecto de las variables. De este modo la inyección de SQL se produce cuando se inserta un código SQL (malicioso) dentro del código SQL de la aplicación con el fin de alterar la correcta ejecución de la consulta. Esto provoca que mediante la ejecución de este código malicioso se pueda obtener, modificar o eliminar cualquier información de la base de datos de la aplicación (incluidos nombres de usuario, contraseñas, etc).
Este sería un ejemplo básico de una aplicación con una vulnerabilidad:

Evitar caracteres peligrosos:
Una forma de evitar inyecciones es evitar caracteres peligrosos ( barra invertida, punto y coma, apóstrofes). En el lenguaje de programación PHP es habitual evitar esto utilizando la función mysql_real_escape_string antes de enviar la consulta a SQL.
$Uname = mysql_real_escape_string($Uname);
$Pword = mysql_real_escape_string($Pword);
$query = “SELECT * FROM Users where UserName=’$Uname’ and Password=’$Pword’”;
mysql_query($query);
Consultas parametrizadas:
Una consulta parametrizada utiliza marcadores de posición de entrada y los valores de los parámetros se suministran en tiempo de ejecución.
$params = array($Uname, $Pword);
$sql = ‘INSERT INTO Users (UserName, Password) VALUES (?, ?)’;
$query = sqlsrv_query($connection, $sql, $params);
Existe una extensa documentación en Internet para protegerse contra las inyecciones de SQL, en este breve repaso hemos querido ayudar a entender un poco mejor qué es y cómo evitarlo.