SQL Injection es un ataque en el que se pasa código malicioso a un servidor SQL que lo ejecuta. El ataque puede resultar en acceso no autorizado a datos confidenciales, o destrucción de datos críticos.
Antes de probar los siguientes métodos, tenga en cuenta que esto solo debe ser una preocupación para los desarrolladores de PHP y similares. Si está utilizando un programa de base de datos orientado (por ejemplo, WordPress, Joomla, OsCommerce), entonces todo lo que necesita hacer es actualizar sus programas a la última versión disponible.
Métodos para prevenir SQL Injection:
Escapando
Una forma de impedir las inyecciones es evitar caracteres peligrosos (es decir, barra invertida, apóstrofo y punto y coma). En PHP, es típico utilizar la técnica de "escaping" en la entrada usando la función
mysql_real_escape_string
antes de enviar la consulta SQL.
Ejemplo:
$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);
Declaraciones parametrizadas
Una consulta parametrizada usa espacios reservados para la entrada, y los valores de los parámetros se proporcionan en tiempo de ejecución.
$params = array($Uname, $Pword);
$sql = 'INSERT INTO Users (UserName, Password) VALUES (?, ?)';
$query = sqlsrv_query($connection, $sql, $params);
Avanzado: En PHP versión 7 y superior, hay varias opciones para el uso de declaraciones con parámetros, la capa de base de datos DOP es una de estas. También hay métodos específicos de proveedores: por ejemplo, MySQL 4.1 + utilizado con la extensión MySQLi