Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda para crear un formulario de login y pass (https://www.clubdelphi.com/foros/showthread.php?t=22426)

Striker 15-06-2005 07:22:47

Ayuda para crear un formulario de login y pass
 
Saludos a todos!

Bueno, mi problema es el siguiente:

Cuento con una base de datos ya creada en access llamada savcc.mdb donde en una tabla llamada tbl_logpass cree unos campos que son:

clave_user
login_user
pass_user

bueno, y mi formulario tiene los siguientes campos:

un edit para el login
un edit para el password
un boton de aceptar para que haga las respectivas validaciones

lo que deseo que haga este formulario es que accese a la base de datos ya mencionada y que verifique si el login y pass introducidos en los campos edit concuerdan con los que estan dentro de la base de datos de access y si fue satisfactoria la busqueda proceda a abrir otro form donde se realizaran actividades como altas,bajas, modificaciones y consultas de clientes y demas procesos.

cabe notar que ya realice la conexion a la base de datos con el ADOConnection(ADODB) y tambien ya realice la conexion con la tabla con el ADOTable(ADODB).

Agradeciendo de antemano la ayuda prestada y por tomarse el tiempo de leer mi problema.

Hasta luego y Exitos!

NOTA:
He editado el post porque ya resolvi mi problema, terminando mi proyecto y despues de que lo entregue procedere con enviar el codigo para futuros consultantes. Hasta luego y gracias! :D

pepegu 01-08-2006 17:23:27

hola
 
ojala que puedas poner como lo solucionaste... yo tengo estoy queriendo resolver la misma situacion.

Gracias!!

vtdeleon 01-08-2006 17:28:38

Cita:

Empezado por pepegu
ojala que puedas poner como lo solucionaste... yo tengo estoy queriendo resolver la misma situacion.

Haz una búsqueda en el foro!
Se ha hablado bastante de este tema.

Saludos

kman 01-08-2006 21:25:48

Hola.

Yo lo hice realizando un Locate al codigo de usuario en la tabla de claves
y luego procedí a validar tal clave que concuerde con la del edit, si es correcto que inicie sesión.

si necesitas códigos me avisas.

dayrontbs 02-08-2006 15:41:04

Sugerencia
 
Para podr comprobar si el usuario y la contraseña son correctas pues debes hacer primero uan consulta a esa base de datos trayendo los usuarios y las contraseñas guardadas y cargarlos por ejemplo en un combobox para usuarios y otro para contraseñas obviamente invisibles al usuario y hacer un ciclo segun la cantidad de items del combobox preguntar uno por uno.. por ejemplo el item 0 del combobox usuario es pepe y el item 0 del combobox pass es 861030 pues pregunto si lo que esta en mis edit es eso pues adelnate si no es asi paso al siguiente item y ya... si necesitas mas ayuda pyes dime.... yo tengo hecho un login para una aplicacion mia pero utilizo el registro de windows que es mas recomendable tengo creadas mis llaves donde nadie sabe ni encontraran jajajajaa te recomiendo que uses este metodo, si necesitas mas explicacion pues ya sabes donde estamos... :D

Sick boy 02-08-2006 18:05:12

Cita:

utilizo el registro de windows que es mas recomendable tengo creadas mis llaves donde nadie sabe ni encontraran jajajajaa
Eso es lo que tu te crees.
Este metodo no es nada seguro, un usuario con conocimientos medios se lo salta en unos minutos.

Un programa como regmon, puede indicar facilmente que claves de registro estas leyendo, e incluso creo recordar que te da los valores obtenidos.

Asi que no solo no es seguro, sino que como ademas dices que lees todas las claves de todos los usuarios, pues eso, de un tirón obtienes todos los login y password.

Lo del locate, pues es un poco más seguro, pero como que tampoco es muy valido. Nunca es buena idea traerte el pass y hacer una comprobación.
Por otro lado, access no es nada seguro, asi que de insertar la contraseña, pasenla por un encriptador, porque sino en 2 minutos se obtienen todos los login y pass.

Si realmente les interesa la seguridad de las contraseñas, hay que elaborarlo un poco más, lo anteriormente expuesto es una seguridad "para niños"

Les voy a dar una idea:
Hagan una sentencia select parametrizada con el login y el pass, y luego comprueben si el query les devuelve alguna fila (con lo que el acceso es correcto) o si por el contrario no les devuelve ninguna fila (login o pass incorrectos).

Ejemplo:
Código Delphi [-]
q1.sql.add('SELECT login FROM usuarios WHERE login=:log AND password=:pass');
q1.parambyname('log').asstring:=edit_login.text;
q1.parambyname('pass').asstring:=edit_pass.text;
q1.open;
if q1.recordcount>0 then showmessage('correcto');
// recordcount no es valido para bases cliente/servidor.

Si quieren, encripten el login o el pass (o ambos) en la base de datos, y antes de pasar el dato al parametro hagan de nuevo la encriptación.

Y como apunte personal, no usen access, NUNCA

Saludos

roman 02-08-2006 18:32:59

Hola, totalmente de acuerdo en que el uso del registro no es confiable. Sin embargo creo conveniente observar que una sentencia como

Código SQL [-]
SELECT login FROM usuarios WHERE login=login AND password=passsord

pudiera prestarse a una inyección sql. Pienso que convendría más simplemente buscar el login:

Código SQL [-]
SELECT login FROM usuarios WHERE login=login

y con el registro resultante (si existe) comparar las contraseñas. Eso sí, la contraseña debe guardarse encriptada y para hacer la comparación no se desencripta sino que se encripta la que se proporciona y se compara con la almacenada.

// Saludos

Sick boy 02-08-2006 19:02:49

jejejeeje, no queria entrar en el SQL-injection para no complicar el tema.
Con access bastaria con romper la protección de la base de datos y leer la tabla de usuarios, asi que no me pareció oportuno entrar a comentar esta tecnica.

Pero, date cuenta de que en el caso de encriptar el login y el password, la injeccion de sql es imposible, ya que los dos parametros se encriptan ANTES DE pasarselos al query.

Por otro lado,
Cita:

Código SQL [-]
SELECT login FROM usuarios WHERE login=login AND password=passsord

pudiera prestarse a una inyección sql. Pienso que convendría más simplemente buscar el login:


Código SQL [-]
SELECT login FROM usuarios WHERE login=login
Si no se encriptan y/o procesan (limitar el juego de caracteres es suficiente) los datos proporcionados por el usuario, AMBAS sentencias son inyectables.

¿por qué es más segura la segunda sentencia que la primera???

roman 02-08-2006 19:12:35

Ja, creo que tienes razón. Es tan insegura una como la otra, en ambas puede haber inyección.

Moraleja: encriptar. :)

// Saludos


La franja horaria es GMT +2. Ahora son las 22:17:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi