Puede que el esquema que tengas sea seguro, pero la mayoria de las veces no es. Injeccion Sql o Injeccion de codigo implica que se esta insertando codigo que ANULA o REEMPLAZA el existente. La mayoria de los sistemas/codigo de Login hechos por personas que no saben que es Sql Injeccion generan una alta probabilidad de que el sistema sea violado.
La injeccion funciona, en el ejemplo presente, asi:
1- El codigo original
Código Delphi
[-]
add ('where Nombre_Usuario ='+QuoteStr(ls_Nombre)));
open;
if recordcount = 0 then begin
ShowMessage('!!
!!!!Nombre de Usuario Incorrecto ');
2- Lo que el programador SUPONE que esta pasando
Código SQL
[-]
where Nombre_Usuario = 'Mamcx'
3- Lo que cualquier hacker, o de hecho, un programador con nada que hacer, digitaria en el nombre de usario/clave algo como
' OR 1=1 ''=
4- Lo que va a pasar
Código SQL
[-]
where Nombre_Usuario = '' OR 1=1 OR ''=''
Ahora bien, marcoszorrilla tiene un esquema que PARECE mas seguro, pero quien sabe?. Si la base de datos es Paradox, es probable que si. Si es un motor sql, a lo mejor no.
Si el codigo es:
Código Delphi
[-]
dsUsuarios.Filter:=ls_Nombre;
if recordcount = 0 then begin
ShowMessage('!!!!!!Nombre de Usuario Incorrecto ');
Le pasa lo mismo. Si es:
Código Delphi
[-]
dsUsuarios.Locate(ls_Nombre...
if recordcount = 0 then begin
ShowMessage('!!!!!!Nombre de Usuario Incorrecto ');
La anterior injeccion falla (creo. No he probado). Pero se puede trabajar un poco mas. Aun un codigo que use parametros y un procedimiento almacenado o use Locate o Find PUEDE ser suceptible a la injeccion. Ahora, no he probado con Localte o Find, pero seguro que con parametros de texto y SP se puede...
La UNICA forma de estar seguro, es que el usuario/clave tenga una mascara que solo acepte caracteres validos.