Ver Mensaje Individual
  #10  
Antiguo 03-12-2004
Avatar de mamcx
mamcx mamcx is online now
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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.
__________________
El malabarista.
Responder Con Cita