tengo este códigoPrevención de inyección SQL en ASP.Net
UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ Ref +"'' AND bookno = ''"+ Session("number") +"'' ')
¿Cómo puedo prevenir las inyecciones SQL en esto?
ACTUALIZACIÓN
Esto es lo que estoy tratando
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con);
cmd.Parameters.AddWithValue("@ref", 34);
Por alguna razón, todo trato y añadir que no parece funcionar sigo recibiendo SQL Command
mencionan a continuación.
El error es este
'SqlCommand' is a type and cannot be used as an expression
Me haré cargo de otra persona de trabajo de modo que todo esto es nuevo para mí y me gustaría hacer las cosas de la manera correcta así que si alguien puede proporcionar más ayuda sobre cómo hacer que mi consulta sea segura a partir de las inyecciones de SQL, por favor hazlo.
ACTUALIZACIÓN NO2
he añadido en el código como dijo VasilP como esto
Dim dbQuery As [String] = "SELECT * FROM table WHERE ref = '" & Tools.SQLSafeString(Ref) & "' AND bookno = '" & Tools.SQLSafeString(Session("number")) & "'"
pero me da un error Tools is not declared
necesito para especificar un cierto espacio de nombres para que funcione?
ACTUALIZACIÓN
Alguien tiene alguna idea de lo mejor de conseguir mi consulta a salvo de inyección de SQL sin los errores que estoy experimentando?
ACTUALIZACIÓN
ahora tengo que trabajar por lo que sin los parámetros de bits del código fuente actualizado mi idea de por qué no va a añadir el valor del parámetro aquí?
Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = @investor ') ", conn)
query.Parameters.AddWithValue("@investor", 69836)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
funciona de la siguiente
Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = 69836') ", conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
El error que estoy recibiendo es este
An error occurred while preparing a query for execution against OLE DB provider 'MSDASQL'.
Y es porque no es la sustitución del @investor
con el 69836
¿Algunas ideas?
SOLUCIÓN
Aquí es cómo resolví mi problema
Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'")
conn.Open()
Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn)
dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()
Ahora puedo escribir consultas sin la preocupación de inyección SQL
Parece que estoy recibiendo errores al intentar poner algo de esto en mi página –
@Jamie Taylor ... va a necesitar un poco más de detalles que "Parece que estoy recibiendo errores ..." para ayudar vete. –
Sigue obteniendo ''SqlCommand' es un tipo y no se puede utilizar como una expresión' –