Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-11-2012
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 23
jsc Va por buen camino
ante todo disculpad mi ignorancia en este tema;

en el post que puse mas arriba habia un enlace a un hilo que trataba de inyeccion sql.
he recuperado un post de ese hilo con este enlace http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL que me parece muy interesante pero que lamentablemente poco entiendo
el problema que expuse en este hilo lo he solucionado de esta manera:
Código:
Código Delphi [-]

procedure openADOQuery (ADOQuery:TObject);
begin
   with frmadmin do
      WITH ADOQuery as TADOQuery do
      begin
         IF NOT prepared
            then
               begin
                  close ;prepared;
                  open
               end
            else open ;
      end;
end;

procedure muestratodosdatos () ;
var torigen,tdestino:string;
begin
   with frmadmin do
   begin
TRY
      torigen:= cbtold.text ;
      WITH ADOQuery1 do
      begin
         close ;sql.clear ;parameters.clear ;
         sql.add('SELECT * FROM '+torigen);
         openADOQuery (ADOQuery1);
         lold.Caption := inttostr(recordcount) ;
      end;
   EXCEPT on exception do MessageDlg ('Errores al cargar los datos',mtWarning,[mbOk],0) ;
   END;
...
esto me ha funcionado pero me preocupa el tema de la inyeccion sql; de esta manera quedaria el codigo expuesto a que software malicioso atacara la aplicacion y que por consiguiente esta fuera vulnerable?

vamos; otro ejemplo, con este codigo:
Código:
...
ADOQuery1.sql.add ('SELECT campo1,campo2 FROM tabla WHERE condicion =:parametro');
ADOQuery1.parameters.parambyname('parametro').value := unvalor ;
...
la aplicacion seria vulnerable a ataques?

repito, disculpad mi ignorancia
gracias y saludos,
Responder Con Cita
  #2  
Antiguo 23-11-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.710
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Pero no mezcles las cosas, ahora no se sabe qué has preguntado ni de lo que trata el hilo
Responder Con Cita
  #3  
Antiguo 23-11-2012
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 23
jsc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pero no mezcles las cosas, ahora no se sabe qué has preguntado ni de lo que trata el hilo
lo siento,
la cuestion que pregunto es si con el codigo que he puesto arriba, la aplicacion es segura y no vulnerable a ataques de inyeccion sql.
como podreis imaginar los datos almacenados en la bd tienen que ser CONFIDENCIALES y no pueden estar expuestos a que cualquiera pueda alterarlos, leerlos...

no repito el codigo otra vez esta arriba, pero esto es una pincelada
Código:
   sql.add('SELECT * FROM '+torigen);
Código:
...
ADOQuery1.sql.add ('SELECT campo1,campo2 FROM tabla WHERE condicion =:parametro');
ADOQuery1.parameters.parambyname('parametro').value := unvalor ;
...
Responder Con Cita
  #4  
Antiguo 23-11-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.710
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Con parámetros, es lo más seguro.
Responder Con Cita
  #5  
Antiguo 23-11-2012
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 23
jsc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Con parámetros, es lo más seguro.
muchas gracias Casimiro Notevi
deduzco entonces que esto es seguro
Código:
...
ADOQuery1.sql.add ('SELECT campo1,campo2 FROM tabla WHERE condicion =:parametro');
ADOQuery1.parameters.parambyname('parametro').value := unvalor ;
...
pero en cambio la parte de codigo que contiene esto otro no lo es:
Código:
 sql.add('SELECT * FROM '+torigen);
probe esto pero me da error de syntaxis en la clausula FROM
Código:
sql.add('SELECT * FROM :torigen');
parameters.parambyname('torigen').value := combobox1.text ;
combobox1.text coge el nombre de la tabla

si estoy en lo cierto, alguna idea de como podria implementarlo para que funcionara y fuera seguro?
gracias nuevamente
Responder Con Cita
  #6  
Antiguo 23-11-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.710
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
En cuanto a lo de la seguridad, según tengo entendido por lo que he leído, sí, es así.

En cuanto al error, pues no sé, si no pones más código
Responder Con Cita
  #7  
Antiguo 26-11-2012
jsc jsc is offline
Miembro
 
Registrado: nov 2003
Posts: 144
Poder: 23
jsc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
En cuanto a lo de la seguridad, según tengo entendido por lo que he leído, sí, es así.

En cuanto al error, pues no sé, si no pones más código
Hola nuevamente
Pues el codigo la verdad es que no tiene misterio
Código Delphi [-]
With adoquery do
Begin
  Close;sql.clear;
  parameters.clear;
  Sql.add('select * from :tabla');
  Parameters.parambyname('tabla').value:=combobox1.text;
  Open ;
End
Error:
Código:
error de syntaxis en la clausula From
La bd esta en access puede ser ese el problema?
Igual me repito mucho pero habria otra manera de hacerlo garantizando la seguridad?
Necesito que la consulta sea flexible a que el usuario pueda seleccionar las tablas y campos de la bd sobre las que hacer la consulta.
Los software comerciales lo hacen; posible sera pero en el como podriais darme idea?a mi lo que se me ocurrio ya lo he probado pero me da los problemas que ya he descrito en post de mas arriba.
Gracias y saludos

Última edición por Casimiro Noteví fecha: 26-11-2012 a las 14:01:03.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
funcion para no repetir codigo:( ivantj24 Varios 12 18-10-2012 22:27:45
Componente para buscar registros, para no repetir codigo. flystar Conexión con bases de datos 9 28-04-2010 23:16:15
consulta con tabla temporal para hacer acumulados tgsistemas MySQL 4 19-03-2010 11:43:41
Componente para repetir informacion apablado Varios 0 30-03-2009 17:26:12
Consulta SQL para datos ordenados en otra tabla cotoprix SQL 8 26-01-2004 23:54:53


La franja horaria es GMT +2. Ahora son las 14:19:08.


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