Database

SQL Injection explicado

Introducción

La técnica de ataque de SQL Injectión (Inyección de SQL) explota una vulnerabilidad de la capa de acceso a datos de la aplicación. Es genérica a cualquier aplicación, no solo, como mucha gente cree, a aplicaciones web aunque debido al mayor acceso a través de internet así como al "descuido" de los desarrolladores web en muchas ocasiones a la hora de tratar los parametros GET ha hecho que este tipo de ataque se popularice en la web.

Anatomía del ataque

Un ataque basado en inyección de sql responde a una estructura de código en la que vamos a realizar una consulta o comando sobre una base de datos que contiene algunos parametros que nos suministra el usuario.

El problema se plantea cuando no se comprueba que dichos parametros sean válidos sino que el programador se ha limitado a concatenarlos en las partes correspondientes de la consulta, por ejemplo:

string consulta = "SELECT Count(*) FROM Users WHERE Name='" +
                   txtNombre.Text + "' AND Password = '" + txtPassword.Text + "'";

dicha consulta en principio devuelve el número de usuarios cuyo nombre y password coincide con los suministrados en los campos de texto indicados. El problema asociado a un atáque SQL Injection viene dado, no porque el código sea incorrecto sino porque se asume que los parametros de entrada son correctos, es decir, no se tienen en cuenta todas las posibilidades. Así si suponemos los siguientes valores para los campos