Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Prevenire SQL injection in ASP.Net

Prova a utilizzare una query parametrizzata ecco un link http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

Inoltre, non utilizzare OpenQuery... usa this per eseguire select

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

Altri articoli che descrivono alcune delle tue opzioni:

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

Qual è la sintassi T-SQL per connettersi a un altro SQL Server?

Modificato

Nota:la tua domanda originale riguardava le query distribuite e i server collegati. Questa nuova istruzione non fa riferimento a una query distribuita. Posso solo presumere che ora ti stai connettendo direttamente al database. Ecco un esempio che dovrebbe funzionare. Ecco un altro sito di riferimento per l'utilizzo di SqlCommand.Parameters

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

Modificato:

Ok Jamie taylor cercherò di rispondere di nuovo alla tua domanda.

Stai usando OpenQuery perché probabilmente stai usando un DB collegato

Fondamentalmente il problema è che il metodo OpenQuery accetta una stringa che non puoi passare una variabile come parte della stringa che hai inviato a OpenQuery.

Puoi invece formattare la tua query in questo modo. La notazione segue nomeserver.nomedatabase.nomeschema.nometabella. Se stai utilizzando un server collegato tramite odbc, ometti il ​​nome del database e il nome dello schema, come illustrato di seguito

    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