Visual Basic.NET - ¿Para que sirven los objetos parameter en ADO.NET

   
Vista:

¿Para que sirven los objetos parameter en ADO.NET

Publicado por Gabriel (13 intervenciones) el 15/02/2010 16:34:58
Buenas tardes:

Estoy aprendiendo ADO .NET y al encontrarme con los sqlparemeters u oracleparameters no entiendo su función.

Aparentemente es lo mismo que tener un textbox pero mas costoso y no parecen proteger contra inyecciones sql.

¿Alguien me podría orientar?.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de roger

RE: ¿Para que sirven los objetos parameter en ADO.

Publicado por roger (186 intervenciones) el 16/02/2010 13:19:38
sí protegen contra inyecciones de sql (a diferencia de concatenar una consulta con los valores de textbox) y proveen seguridad en el tipo de datos, evitando el casting o conversion en sql que puede traer resultados inesperados (por ejemplo con las fechas). No se que tan real sea cada una de estas cosas para el proveedor de datos de oracle, pero considero que debe ser igual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: ¿Para que sirven los objetos parameter en ADO.

Publicado por Gabriel (13 intervenciones) el 16/02/2010 15:22:13
Muchas gracias Roger:

Por lo que dices entiendo que la protección es necesaria en SQLServer

He probado a hacer la inyección sql en Oracle y Access y no tragan. Oracle ni tan siquiera admite el punto y coma (;) en el commandtext del comando y lanza un ORA-00911: carácter no válido si lo escribes

Hice algo así:

comando.commandtext ="INSERT INTO DEPARTMENTS (department_id, department_name) VALUES (3000, 'Contabilidad');
comando.executeNonQuery
y lanzó el ORA-00911, caracter no válido

Sin embargo, al hacer

comando.commandtext ="INSERT INTO DEPARTMENTS (department_id, department_name) VALUES(3000, 'Contabilidad')"
comando.executeNonQuery
funcionó de maravilla

Si metes otra orden después del ; como DROP TABLE DPTO_80; lanza el mismo error, es decir no accede a leer una segunda instrucción SQL.

En http://www.gfc.edu.co/woakas/weblog/archives/2007/06/20/sintaxis_oracle/ se habla de esto.


Access 2003 es mas de lo mismo y ante un commandtext resultante de fundir la orden con lo insertado en los textboxes como esto:

"INSERT INTO DEPARTMENTS (department_id, department_name) VALUES (5, 'Contabilidad'); DROP TABLE DPTO_80;"
lanza una OleDbException "Se encontraron caracteres después del final de la instrucción SQL"

es decir no admite mas texto tras el ;

Si haces
"INSERT INTO DEPARTMENTS (department_id, department_name) VALUES (5, 'Contabilidad'); "
no hay problema e inserta correctamente.

¿Sabes tu hacer una inyección sql?.

Muchas gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de roger

RE: ¿Para que sirven los objetos parameter en ADO.

Publicado por roger (186 intervenciones) el 16/02/2010 17:31:56
espera haber si entiendo, o sea, quieres probar la inyeccion de sql??? mira este articulo http://www.oracle.com/technology/pub/articles/mastering_dotnet_oracle/cook_masteringdotnet.html, me parece que resolvera todas tus dudas. Si he hecho inyecciones de sql, pero con oracle probablemente la sintaxis puede cambiar. sin embargo con seguridad el articulo muestra la manera correcta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: ¿Para que sirven los objetos parameter en ADO.

Publicado por Gabriel (13 intervenciones) el 16/02/2010 22:25:19
Genial.
He probado a hacer una inyección y funciona. Ahora tengo claro que esto de los parameters es útil y necesario.
La verdad es que soy un poco como Santo Tomás.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar