SQL server e inyeccion de codigo

03/07/2006 - 12:30 por Tito | Informe spam
Muchos DBA sugieren que se use Store procedures para toda accion de acceso o
modificacion a la base de datos. Yo pregunto si postear una sentencia sql a
traves de un comando sql en C# es susceptible de inyeccion de codigo ?

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
03/07/2006 - 13:42 | Informe spam
Tito,

Yo pregunto si postear una sentencia sql a traves de un comando sql en C#
es susceptible de inyeccion de codigo ?





No si utilizas SQL parametrizado en lugar de SQL dinámico.
Utiliza siempre que puedas sentencias de tipo:

"SELECT ID FROM Clientes WHERE Nombre = @Nombre AND Contra = @Contra"

asignando valores a los parámetros, en vez de

"SELECT ID FROM Clientes WHERE Nombre = '" + nombre + "' AND Contra = '"
+ contra + "'"

donde la sentencia se construye en tiempo de ejecución.

En cualquier caso, valida (del lado del servidor) la información que el
usuario introduce en los controles de texto.

Slsd - Octavio
Respuesta Responder a este mensaje
#2 Fran Peula Ariza
03/07/2006 - 13:54 | Informe spam
Esto como siempre depende de lo que necesites. Si son consultas fijas, se
recomienda usar procedimientos almacenados, puesto que aumentas las
escalabilidad de la aplicación (si haces una consulta a una tabla y esa tabla
se parte en dos, pues sólamente modificando el sp modificarías la consulta, y
no tendrías que tocar el código).
En caso de que la consulta dependa de una entrada del usuario, lo
recomendable es utilizar los parámetros como dice Octavio.

Saludos

Fran Peula Ariza

"Octavio Hernandez" escribió:

Tito,

>> Yo pregunto si postear una sentencia sql a traves de un comando sql en C#
>> es susceptible de inyeccion de codigo ?

No si utilizas SQL parametrizado en lugar de SQL dinámico.
Utiliza siempre que puedas sentencias de tipo:

"SELECT ID FROM Clientes WHERE Nombre = @Nombre AND Contra = @Contra"

asignando valores a los parámetros, en vez de

"SELECT ID FROM Clientes WHERE Nombre = '" + nombre + "' AND Contra = '"
+ contra + "'"

donde la sentencia se construye en tiempo de ejecución.

En cualquier caso, valida (del lado del servidor) la información que el
usuario introduce en los controles de texto.

Slsd - Octavio




Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
03/07/2006 - 17:00 | Informe spam
La inyeccion de código nada tiene que ver con procedimientos almacenados ya
que puedes tener uno y que su llamada sea igualmente susceptible de
inyeccion de codigo. Por ejemplo si ejecutas algo asi:

sql = "EXEC MiSP " + MiValor

Sigues con el mismo problema de inyeccion de codigo. Como ya dijeron, la
solucion esta en usar parametros.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#4 Luis
03/07/2006 - 17:18 | Informe spam
"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> wrote in message
news:eHgu%
La inyeccion de código nada tiene que ver con procedimientos almacenados
ya que puedes tener uno y que su llamada sea igualmente susceptible de
inyeccion de codigo. Por ejemplo si ejecutas algo asi:




Yo me imagino que el companero se refiere a seguridad. Es decir que el
administrador le puede quitar el permiso a los usuarios de hacer consultas o
actualizaciones directas pero le puede dar permiso a ejecutar procedimientos
almacenados como si fuesen unidades independientes.
Si un usuario solo tiene permiso de ejecutar SP's no importa que le inyecten
codigo si el servidor lo va a rechazar, no ?



sql = "EXEC MiSP " + MiValor

Sigues con el mismo problema de inyeccion de codigo. Como ya dijeron, la
solucion esta en usar parametros.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C

Respuesta Responder a este mensaje
#5 Fran Peula Ariza
03/07/2006 - 18:24 | Informe spam
A eso me refería yo ;). He releído mi post y me he explicado mal, pero vamos,
la idea es utilizar siempre que se pueda procedimientos almacenados y no
escribir la sentencia SQL en código. Lógicamente, se haga como se haga, los
valores variables, para evitar la inyección sql, deberán pasarse por
parámetros ;).

Saludos

Fran Peula Ariza

"Eduardo A. Morcillo [MS MVP VB]" escribió:

La inyeccion de código nada tiene que ver con procedimientos almacenados ya
que puedes tener uno y que su llamada sea igualmente susceptible de
inyeccion de codigo. Por ejemplo si ejecutas algo asi:

sql = "EXEC MiSP " + MiValor

Sigues con el mismo problema de inyeccion de codigo. Como ya dijeron, la
solucion esta en usar parametros.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida