Ya vimos como evitar la inyección de código SQL de una forma simple.
La inyección de código SQL consiste en la modificación del comportamiento de nuestras consultas mediante la introducción de parámetros no deseados en los campos a los que tiene acceso el usuario.
Este tipo de errores puede permitir a usuarios malintencionados acceder a datos a los que de otro modo no tendrían acceso y, en el peor de los casos, modificar el comportamiento de nuestras aplicaciones.
Este ejemplo esta basado en el post de Cesar Manivesa.
Supongamos que tenemos una consulta de la siguiente forma:
-
Dim sql As String = "Select estatus From usuarios Where " & _
-
" usuario = '" & Trim(Me.txtUser.Text) & _
-
"' And password = '" & Trim(Me.txtPassword.Text) & "'"
El formulario se mostraría de la siguiente forma:
Ingresando nuestros datos de forma normal nuestra instrucción seria así:
Select estatus From usuarios Where usuario = 'kike' And password = 'prueba'
Pero ingresando en la caja de texto password este código: prueba' or usuario<>'1, la instrucción quedaría así:
Select estatus From usuarios Where usuario = 'kike' And password = 'prueba' or usuario<>'1'
Obviamente al ser ejecutada nos devuelve registros y obtendríamos acceso al programa.
Y ahora lo más importante, ¿qué podemos hacer para evitar estos errores?
Pues hay varios sistemas para evitarlo. Por ejemplo podemos filtrar las entradas de los usuarios reemplazando la aparición de '(comillas simples) por otro carácter e incluso evitando que los usuarios puedan pasar caracteres como \ / “ ‘ o cualquier otro que se nos ocurra que puede causar problemas. Estos filtros pueden ser tan sencillos como utilizar la sentencia Replace de Visual Basic:
-
Dim sql As String = "Select estatus From usuarios Where " & _
-
" usuario = '" & Trim(Replace(Me.txtUser.Text, "'", "k")) & _
-
"' And password = '" & Trim(Replace(Me.txtPassword.Text, "'", "k")) & "'"
Entonces nuestra sentencia alterada quedaría así:
Select estatus From usuarios Where usuario = 'kike' And password = 'pruebak or usuario<>k1'


Que se debe colocar en la base mdb en el campo estatus???