Vorbeugen von SQL Injection in ASP.Net
Ich habe diesen Code
UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ Ref +"'' AND bookno = ''"+ Session("number") +"'' ')
Wie würde ich SQL-Injections in diesem Fall verhindern?
AKTUALISIERE
Hier ist was ich versuche
SqlCommand cmd = new SqlCommand("Select * from Table where ref=@ref", con);
cmd.Parameters.AddWithValue("@ref", 34);
Aus irgendeinem Grund scheint alles, was ich versuche und hinzufüge, nicht zu funktionieren. Ich bekomme immerSQL Command
unten genannten
Der Fehler ist dieses
'SqlCommand' is a type and cannot be used as an expression
Ich übernehme die Arbeit eines anderen, daher ist das alles neu für mich und ich würde gerne die Dinge richtig machen. Wenn also jemand mehr Hilfe geben kann, wie ich meine Anfrage oben vor SQL-Injections schützen kann, dann mach es bitte.
UPDATE NO 2
Ich fügte im Code hinzu, wie VasilP dies sagte
Dim dbQuery As [String] = "SELECT * FROM table WHERE ref = '" & Tools.SQLSafeString(Ref) & "' AND bookno = '" & Tools.SQLSafeString(Session("number")) & "'"
Aber ich bekomme eine FehlermeldungTools is not declared
Muss ich einen bestimmten Namespace angeben, damit es funktioniert?
AKTUALISIERE
Hat jemand eine Idee, wie ich meine Abfrage ohne die aufgetretenen Fehler vor SQL-Injection schützen kann?
AKTUALISIERE
Ich habe es jetzt, damit es ohne die Parameter funktioniert. Hier ist mein aktualisierter Quellcode. Irgendeine Idee, warum der Parameterwert nicht hinzugefügt wird.
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()
Es funktioniert so
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()
The Fehler, den ich erhalte, ist dieses
An error occurred while preparing a query for execution against OLE DB provider 'MSDASQL'.
Und es ist, weil es das @ nicht erset@investor
mit dem69836
Irgendwelche Ideen
LÖSUN
Hier habe ich mein Problem gelöst
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()
etzt kann ich Abfragen schreiben, ohne mir Sorgen um die SQL-Injection machen zu müsse