Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verhindern der SQL-Injection in ASP.Net

Versuchen Sie es mit einer parametrisierten Abfrage, hier ist ein Link http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

Verwenden Sie auch nicht OpenQuery ... verwenden Sie this, um die Auswahl auszuführen

SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno

Weitere Artikel, in denen einige Ihrer Optionen beschrieben werden:

http://support.microsoft.com/kb/314520

Wie lautet die T-SQL-Syntax, um eine Verbindung zu einem anderen SQL-Server herzustellen?

Bearbeitet

Hinweis:Ihre ursprüngliche Frage bezog sich auf verteilte Abfragen und Verbindungsserver. Diese neue Anweisung verweist nicht auf eine verteilte Abfrage. Ich kann nur davon ausgehen, dass Sie sich jetzt direkt mit der Datenbank verbinden. Hier ist ein Beispiel, das funktionieren sollte. Hier ist eine weitere Referenzseite für die Verwendung von SqlCommand.Parameters

SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con); 
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;

Bearbeitet:

Ok Jamie Taylor, ich werde versuchen, Ihre Frage noch einmal zu beantworten.

Sie verwenden OpenQuery, weil Sie wahrscheinlich eine verknüpfte DB verwenden

Grundsätzlich besteht das Problem darin, dass die OpenQuery-Methode eine Zeichenfolge verwendet, an die Sie keine Variable als Teil der Zeichenfolge übergeben können, die Sie an OpenQuery gesendet haben.

Sie können Ihre Abfrage stattdessen so formatieren. Die Notation folgt Servername.Datenbankname.Schemaname.Tabellenname. Wenn Sie einen Verbindungsserver über odbc verwenden, lassen Sie den Datenbanknamen und den Schemanamen weg, wie unten dargestellt

    Dim conn As SqlConnection = New SqlConnection("your SQL Connection String")
    Dim cmd As SqlCommand = conn.CreateCommand()
    cmd.CommandText = "Select * db...table where investor = @investor"
    Dim parameter As SqlParameter = cmd.CreateParameter()
    parameter.DbType = SqlDbType.Int
    parameter.ParameterName = "@investor"
    parameter.Direction = ParameterDirection.Input
    parameter.Value = 34