Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola sabueso1010.

Una aclaración, cuando dije:
Cita:
No podés pasar el nombre de la tabla a una consulta así en forma directa, vas a tener que crearte un procedimiento para la tarea.
Me estaba refiriendo a que no podés enviar el nombre de tabla en un parámetro como está en el código que adjuntas en el mensaje #1.

Del modo que te sugiere defcon1_es si se puede, pero deja el código expuesto a la Inyección SQL.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 26-09-2011
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 22
abelg Va por buen camino
Hola, mira este código y espero te ayude.

Código Delphi [-]
qtabla:=dbserver+'\@viajes.db';
 with data.qapagos do
 begin
    close;
    SQL.Clear;
    SQL.ADD('select * from _tabla  where referencia = :xreferencia ');
    SQL.Text := StringReplace(SQL.Text, '_tabla', qtabla, [rfReplaceAll, rfIgnoreCase]);
    parambyname("xreferencia").asinteger:=_referencia;
    open;
 end;

solo que al formar tu consulta por código no le veo sentido pero esto funciona, correctamente.
ojo. qtabla tiene que ser un variable tipo string
Responder Con Cita
  #3  
Antiguo 26-09-2011
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 23
defcon1_es Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola sabueso1010.

Una aclaración, cuando dije:

Me estaba refiriendo a que no podés enviar el nombre de tabla en un parámetro como está en el código que adjuntas en el mensaje #1.

Del modo que te sugiere defcon1_es si se puede, pero deja el código expuesto a la Inyección SQL.

Saludos.
Me has dejado intrigado, pero en el ejemplo ¿cómo se podría inyectar código SQL si el nombre de la tabla no lo puede teclear un usuario?
¿modificando en memoria el contenido de la variable qTabla?

Voy a buscar más referencias sobre inyecciones de código SQL y sobre todo herramientas para el análisis de este tipo de vulnerabilidad.
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...

Última edición por defcon1_es fecha: 26-09-2011 a las 18:45:08.
Responder Con Cita
  #4  
Antiguo 26-09-2011
sabueso1010 sabueso1010 is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 31
Poder: 0
sabueso1010 Va por buen camino
Smile solucionado

solucionado con el codigo de defcon1_es que es

Código Delphi [-]
qtabla:=dbserver+'\@viajes.db';
with data.qapagos do
begin
  close;
  SQL.Clear;
  SQL.ADD('select * from '+QuotedStr(qtabla)+' where referencia = :xreferencia ');
  parambyname('xreferencia').asinteger:=_referencia;
  open;
end;

y muy importante tanto como el codigo el consejo de ECFISA, hay que tomar
en cuenta mucho que asi el codigo queda expuesto a inyeccion, muy cierto. por el momento sali del problema con el codigo pero si hay que considerar lo que nos dice ECFISA.

gracias a todos los que coolaboraron con este hilo y espero le sirva en el futuro a alguien mas.

saludos.
Responder Con Cita
  #5  
Antiguo 26-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por defcon1_es Ver Mensaje
Me has dejado intrigado, pero en el ejemplo ¿cómo se podría inyectar código SQL si el nombre de la tabla no lo puede teclear un usuario?
Hola defcon1_es.

Si el valor es asignado por código yo tampoco veo la posibilidad de hacerlo. Mi comentario fué por que no ví de que manera sabueso1010 asignaba el valor a la variable, por lo que el código SQL bién podría haber quedado expuesto.

Ahora revisando con más detenimiento véo que no reparé bién en el mensaje #8 donde sabueso1010 dice:
Cita:
...
por eso al campo qtabla le asigno la cadena

qtabla:=dbserver+'\@viajes.db'
....
Así que en este caso, creo como vos, que no es factible.

Al igual que comentás en tu último mensaje, yo también tendría que profundizar más sobre si aún así existe la posibilidad, ya que es una vulnerabilidad potencial muy peligrosa.
Lo que es claro que con el uso de parámetros no es viable la inyección.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 27-09-2011 a las 18:25:17.
Responder Con Cita
  #6  
Antiguo 27-09-2011
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 23
defcon1_es Va por buen camino
Y tanto que es peligrosa:

"existen alrededor de 115 millones de vulnerabilidades de inyección SQL en circulación,
basándose en los datos conseguidos mediante la monitorización de un conjunto de 30 aplicaciones web durante los pasados nueve meses."

Noticia: http://www.csospain.es/Los-ataques-d...noticia-113621
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
Respuesta



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
Enviar a VK_F1 como parametro mRoman OOP 4 01-05-2010 17:44:56
pasar el nombre de una forma como parametro Willo Varios 7 10-03-2009 23:17:05
pasar como parámetro nombre de un componente joanajj Varios 3 04-07-2007 22:25:49
Parámetro como nombre de campo Loviedo SQL 4 12-04-2007 19:49:35
Asignar como parámetro el nombre de la tabla PINO72 Firebird e Interbase 4 20-03-2005 20:00:11


La franja horaria es GMT +2. Ahora son las 04:05:18.


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