Menu

Ataques maliciosos II – SQL Injection

Noviembre 18, 2010 - PHP

Para terminar esta mini serie de ataques maliciosos hablaremos de inyeccion SQL, comencemos con un ejemplo, tenemos un formulario de iniciar sesión con lo habitual, nombre de usuario y password. Ahora nuestra consulta para verificar el usuario realizamos la siguiente consulta:

$query = "SELECT name FROM tblUsers WHERE username = '$var'";

Ahora, asumamos que en el campo de nombre de usuario el usuario (con mala intencion o no) ingresa el siguiente “nombre”:

$evilName = "''; DELETE FROM tblUsers WHERE 1 or username = ''";

Esta es la consulta en la base de datos:

Y este es el script junto con el screenshot de su ejecución.

echo "Prueba de SQL Injection";

$link = mysql_connect("MySQL", "root", "");

$var = 'proco';

mysql_selectdb("wca");

$query = "SELECT name FROM tblUsers WHERE username = '$var'";
$res = mysql_query($query);

echo "<br /><br />";

while ($row = mysql_fetch_assoc($res)) {
    echo $row['name'];
}

$evilName = "''; DELETE FROM tblUsers WHERE 1 or username = ''";

$query = "SELECT name FROM tblUsers WHERE username = $evilName";
$res = mysql_query($query);

var_dump($query);

echo "<br /><br />";

while ($row = mysql_fetch_assoc($res)) {
    echo $row['name'];
}

Luego de su ejecución, así luce la base de datos:

Como vemos el script logra de su cometido de eliminar los registros de la tabla, pero como hacemos para evitar esto?, sencillo, usemos una función llamada mysql_real_escape_string, esta función escapa los caracteres especiales tales como la comillas simples (‘) con lo cual logramos evitar la ejecución de consultas maliciosas o bien primero filtrar las entradas de los usuarios utilizando los filtros de PHP de los que ya hablamos en esta entrada.

Happy coding!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *