1
« en: Domingo 24 de Abril de 2011, 03:22 »
No esta mal el ejemplo, pero esta enfocado a usuarios con pocos conocimientos y los puedes inducir a dos fallos de seguridad:
1º No se debe decir si lo que falla es el usuario o la contraseña, porque facilitamos el trabajo a quien quiera adivinar los datos de un usuario al que conoce. Son muchos los casos en los que los que trastean en nuestras aplicaciones son usuarios internos a nuestro entorno.
2º en las lineas siguientes estas facilitando que te hagan lo que se llama SQL Inyection:
SQL = "SELECT Nombre, Password " & _
"FROM Usuarios " & _
"WHERE Nombre = '" & txt_Nombre.Text & "'" _
& "AND Password = '" & txt_Password.Text & "'"
El motivo es que si introducen caracteres extraños en txt_Nombre.Text o txt_Password.Text pueden conseguir acceso al programa, o como minimo se producirán errores que probablemente no hayas previsto. Por ejemplo si alguien escribe un %.
Para solucionarlo hay que usar parametros, quedando algo parecido a lo siguiente:
SQL = "SELECT Nombre, Password " & _
"FROM Usuarios " & _
"WHERE Nombre = ? AND Password = ?"
cmdUsuario.CommandText = SQL
Set prmUsuario = cmdUsuario.CreateParameter("Nombre", adVarChar, adParamInput, 25, Trim( txt_Nombre.Text))
cmdUsuario.Parameters.Append prmUsuario
Set prmUsuario = cmdUsuario.CreateParameter("Clave", adVarChar, adParamInput, 25, Trim(txt_Password.Text))
cmdUsuario.Parameters.Append prmUsuario
Set Rst_Login= cmdUsuario.Execute()
Por ultimo un consejo, situa la base de datos en el mismo directorio de la aplicación o en un subdirectorio de este y usa como ruta app.path que devuelve la ruta donde estas ejecutando la aplicación.
Por ejemplo si la base de datos se llama bdMejoras.mdb y se encuentra en un subdirectorio de donde esta la aplicación llamado BD, sustituye
"Data Source=" & "C:Bd_MEJORASdatabdMejoras.mdb" & ";"
por
"Data Source=" & app.path & "BDbdMejoras.mdb" & ";"