Un poco de seguridad

Habíamos quedado en el post anterior con la idea de agregar una mínima seguridad a nuestra base de datos, encriptando las contraseñas para que no puedan ser leídas directamente si alguien abre la base de datos con un gestor externo.

Para ello vamos a usar el componente gb.crypt y el algoritmo de encriptación llamado MD5. Gambas nos proporciona también el algoritmo DES, pero no será este si no el MD5.Debemos agregar este componente desde el menú proyecto–>propiedades , en la pestaña componentes.

 

Vamos a guardar la contraseña encriptada y mediante su método check comparamos la contraseña introducida con la guardada. Pero…¡Atención! En el momento de comparar se pasa la contraseña tal como se escribió, no hay que encriptarla antes ya que el propio método chek se encarga de esto.

Esto nos significa hacer unas modificaciones en Fmain para comparar las contraseñas.

ClaveEncriptada = hres[“password”]

password = txtpass.text

If txtuser.text = Clave3 And txtpass.text = “” Then     ‘comprobamos que escriba la contraseña

Message.Info(“Ingrese su Contraseña “)

txtpass.SetFocus

Else If txtuser.text = Clave3 And If Crypt.Check(password, ClaveEncriptada) = True Then ‘comprobamos si la contraseña coincide o  no

Message.Info(“Contraseña incorrecta”)

txtpass.SetFocus

Si observamos el código atentamente veremos que Clave 4 se ha convertido en ClaveEncriptada( La que nos trae la base de datos) y password es la que escribimos nosotros. Destacado en negrita esta el método que las compara, que nos devuelve true si las contraseñas no coinciden y false cuando si lo hacen.

Pero ,¿Cómo encriptamos las contraseñas al momento de guardarlas?   Es fácil, pero no lo podemos hacer desde el DataBrowser directamente. Los controles enlazados a datos nos permiten realizar muchas cosas con muy poco código, pero también tienen sus limitaciones, ya que no podemos “intervenir” en sus rutinas de manejo de datos. La solución es sencilla, pero nos implica agregar los usuarios desde un formulario externo, para no recargar este de controles. Vamos entonces a crear un nuevo formulario llamado Fusuarios , al que solo podremos acceder siendo administrador del sistema. Veamos su aspecto:

fusuarios

El nuevo formulario

Aquí va a ir la rutina de encriptación de la contraseña. Veamos todo el código del formulario comentado:

Private hconn As Connection    ‘declaramos variables
Private hresul As Result
Private Encriptado As String

‘**************************************************************************************

Public Sub Form_Open()
Me.Center
cbxtipo.Add(“Admin”)       ‘Cargamos el combobox
cbxtipo.add(“Operador”)
hconn = Modcon.ConectarBase()  ‘Nos conectamos a la base de datos

End

‘**************************************************************************************

Public Function encript(password As String) As String

Encriptado = crypt.md5(password)     ‘funcion de encriptado

End

‘**************************************************************************************

Public Sub btnaceptar_Click()
Dim pass As String
Dim sql As String
If Txtnombre.text = “” Or Txtpass.text = “” Then  ‘comprobar campos que no esten vacios
Message(“complete todos los datos”)
txtnombre.SetFocus
btnaceptar.Enabled = True
Else
pass = txtpass.text
encript(pass)                          ‘aqui llamamos a la funcion encript y le pasamos como parametro la contraseña escrita
hconn = Modcon.ConectarBase()

Try hconn.EXEC(“insert into usuarios values(&1, &2, &3, &4)”, cbxtipo.Current.Text, Null, txtnombre.text, Encriptado)
btnaceptar.Enabled = False
Catch
Message.Error(“Imposible introducir los datos solicitados”)

Endif
End

‘**************************************************************************************

Public Sub btncancelar_Click()

txtnombre.text = “”
txtpass.text = “”
btnaceptar.Enabled = True
End

‘**************************************************************************************

Public Sub btnsalir_Click()

Fadmin.Show
Me.Close

End
Todo lo relacionado a la encritación esta resaltado en azul, el resto no cambia con respecto a las rutinas ya usadas antes para insertar datos. La contraseña encriptada si fuera, por ejemplo, eldani en la base de datos se vería de otra manera:

eldani=$1$xxmv2eN8$HGtH4TaTFZltTVopzYmiE1

Como podrás ver, absolutamente diferente e casi imposible de recordar.

En el próximo post veremos los cambios a Fadmin y subiré el código fuente completo del programa. Hasta entonces.

Anuncios
Esta entrada fue publicada en programación y etiquetada , , , . Guarda el enlace permanente.

4 respuestas a Un poco de seguridad

  1. Hola excelente explicación gracias a ti estoy haciendo mis primeras bases de datos en gamba3, una pregunta cual es la contraseña del archivo ya que al abrirlo pide contraseña de Administrador ?
    Muchas gracias

    • dapeca2608 dijo:

      Probé con la contraseña que tenía y no funciona. Tienes que hacer lo siguiente: Instala el sqlite databrowser,con éste abre la base de datos y edita el usuario administrador dejando la contraseña en blanco.Luego abre el programa,pon el nombre de usuario Daniel Amaro, pasate al campo contraseña y aprieta dos o tres veces espacio, luego login. Ahora podrás editar los usuarios. Eliminalos todos y crea un nuevo usuario administrador con el nombre y la contraseña que quieras.
      Saludos

  2. dapeca2608 dijo:

    ¿Guardaste los cambios antes de cerrar squlite databrowser? S es así debería haber funcionado: Suerte con GAmbas.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s