Evitar la inyección sql

30/11/2004 - 00:19 por José Antonio | Informe spam
Buenos días a tod@s:

1)Tengo que hacer una consulta sobre una tabla y otro par de tablas más
relacionadas con la primera en plan tabla1:facturas,
tabla2:asientos(para cada factura) tabla3:proveedores. De tal forma que al
final me queda que el usuario puede consultar por hasta 10 campos. Pero
también solo puede hacerlo por uno, o por dos, o por tres, o .con todas
las posibles combinaciones, con lo que si no recuerdo mal la combinatoria me
quedarían 1023 formas posibles de realizar la consulta.

Estoy empeñado en evitar en lo posible la posibilidad de inyección sql
utilizando procedimientos almacenados y parametros. En todo el desarrollo de
la aplicación lo he hecho así, y resulta que ahora (que tengo prisa por
terminar) me encuentro con que lo más comodo sería generar la sentencia sql
en el programa cliente y mandarla al servidor.

No se muy bien que hacer y es cierto que desde el programa cliente solo se
permite la entrada libre en 6 campos de los que puedo controlar 2 porque
son de tipo númerico. De esta forma obtendría 15 formas posibles y una
sentencia sql que debería combinar en el procedimiento almacenado. ¿Es esta
una buena forma?. De ser así podíais decirme como lo hago. Quizas mediantes
sp_executesql?. Hay otras formas mejores. ¿Es esto una chapuza?.


2) ¿Puedo pasar como parametro a un procedimiento almacenado algo así?

@ModoEntrega as nvarchar(200) --¿? @ModoEntrega = ('1', '3', '5')

Select * from RegiFacturas Where idModoEntrega in @ModoEntrega


Perdonar el abuso y muchas gracias.

Un abrazo,

José Antonio Sánchez
 

Leer las respuestas

#1 MAXI
30/11/2004 - 00:19 | Informe spam
Hola, una forma es armar un SP con todas las condiciones necesarias y usar
el truco de isnull(@var,capo)

Si vas a usar SQl desde la aplicacion yo haria que no se permita introducir
codigo ' y lo reemplazaria por espacios en blanco :)




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar

Msn Messenger:

"José Antonio" escribió en el mensaje
news:%
Buenos días a :

1)Tengo que hacer una consulta sobre una tabla y otro par de tablas más
relacionadas con la primera en plan tabla1:facturas,
tabla2:asientos(para cada factura) tabla3:proveedores. De tal forma que al
final me queda que el usuario puede consultar por hasta 10 campos. Pero
también solo puede hacerlo por uno, o por dos, o por tres, o .con
todas
las posibles combinaciones, con lo que si no recuerdo mal la combinatoria
me
quedarían 1023 formas posibles de realizar la consulta.

Estoy empeñado en evitar en lo posible la posibilidad de inyección sql
utilizando procedimientos almacenados y parametros. En todo el desarrollo
de
la aplicación lo he hecho así, y resulta que ahora (que tengo prisa por
terminar) me encuentro con que lo más comodo sería generar la sentencia
sql
en el programa cliente y mandarla al servidor.

No se muy bien que hacer y es cierto que desde el programa cliente solo se
permite la entrada libre en 6 campos de los que puedo controlar 2 porque
son de tipo númerico. De esta forma obtendría 15 formas posibles y una
sentencia sql que debería combinar en el procedimiento almacenado. ¿Es
esta
una buena forma?. De ser así podíais decirme como lo hago. Quizas
mediantes
sp_executesql?. Hay otras formas mejores. ¿Es esto una chapuza?.


2) ¿Puedo pasar como parametro a un procedimiento almacenado algo así?

@ModoEntrega as nvarchar(200) --¿? @ModoEntrega = ('1', '3', '5')

Select * from RegiFacturas Where idModoEntrega in @ModoEntrega


Perdonar el abuso y muchas gracias.

Un abrazo,

José Antonio Sánchez


Preguntas similares