Inyección SQL
Inyección
SQL es un método de infiltración
de código intruso que se vale de una vulnerabilidad informática presente en una
aplicación en el nivel de validación de las entradas para realizar consultas a
una base de datos.
El origen de
la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables
utilizadas en un programa que contiene, o bien genera, código SQL. Es, de
hecho, un error de una clase más general de vulnerabilidades que puede ocurrir
en cualquier lenguaje de programación o script que esté embebido dentro de
otro.
Se conoce como
Inyección SQL, indistintamente, al tipo de vulnerabilidad, al método de
infiltración, al hecho de incrustar código SQL intruso y a la porción de código
incrustado.
Se dice que existe o se produjo
una inyección SQL cuando, de alguna manera, se inserta o
"inyecta" código SQL invasor dentro del código SQL programado, a fin
de alterar el funcionamiento normal del programa y lograr así que se ejecute la
porción de código "invasor" incrustado, en la base de datos.
Este tipo de intrusión
normalmente es de carácter malicioso, dañino o espía, por tanto es un problema
de seguridad informática, y debe ser tomado en cuenta por el programador de la
aplicación para poder prevenirlo. Un programa elaborado con descuido,
displicencia o con ignorancia del problema, podrá resultar ser vulnerable, y la
seguridad del sistema (base de datos) podrá quedar eventualmente comprometida.
La intrusión ocurre durante la
ejecución del programa vulnerable, ya sea, en computadores de escritorio o bien
en sitios Web, en éste último caso obviamente ejecutándose en el servidor que
los aloja.
La vulnerabilidad se puede
producir automáticamente cuando un programa "arma descuidadamente"
una sentencia SQL en tiempo de ejecución, o bien durante la fase de desarrollo,
cuando el programador explicita la sentencia SQL a ejecutar en forma
desprotegida. En cualquier caso, siempre que el programador necesite y haga uso
de parámetros a ingresar por parte del usuario, a efectos de consultar una base
de datos; ya que, justamente, dentro de los parámetros es donde se puede
incorporar el código SQL intruso.
Al ejecutarse la consulta en la base
de datos, el código SQL inyectado también se ejecutará y podría hacer un
sinnúmero de cosas, como insertar registros, modificar o eliminar datos,
autorizar accesos e, incluso, ejecutar otro tipo de código malicioso en el
computador.
Por ejemplo, asumiendo que el
siguiente código reside en una aplicación web y que existe un parámetro
"nombreUsuario" que contiene el nombre de usuario a consultar, una
inyección SQL se podría provocar de la siguiente forma:
El código SQL original y vulnerable es:
Consulta:= "SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';"
Aplicación
BASE.Open()
dato = NewMySqlDataAdapter("Select*from
usuarios where user ='"&txtusuario.Text&"' and pass='"&txtpasword.Text&"'", BASE)
Dim dataset AsNewDataSet
dato.Fill(dataset, "Usuarios")
BASE.Close()
Ifdataset.Tables(0).Rows.Count>
0 Then
MEN.Show()
Me.Hide()
Else
MsgBox("ACCESO
DENEGADO, Usuario o contraseña incorrecto", MsgBoxStyle.Critical, "ERROR")
EndIf
EndSub