Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Prevenindo SQL Injection no ASP.Net


Tente usar uma consulta parametrizada aqui está um link http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

Além disso, não use OpenQuery... use this para executar o select
SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno

Mais artigos descrevendo algumas de suas opções:

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

Qual é a sintaxe do T-SQL para se conectar a outro SQL Server?

Editado

Observação:sua pergunta original era sobre consultas distribuídas e servidores vinculados. Essa nova instrução não faz referência a uma consulta distribuída. Só posso supor que você esteja se conectando diretamente ao banco de dados agora. Aqui está um exemplo que deve funcionar. Aqui está outro site de referência para usar SqlCommand.Parameters
SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con); 
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;

Editado:

Ok Jamie taylor vou tentar responder sua pergunta novamente.

Você está usando OpenQuery porque provavelmente está usando um banco de dados vinculado

Basicamente o problema é que o Método OpenQuery pega uma string que você não pode passar uma variável como parte da string que você enviou para o OpenQuery.

Você pode formatar sua consulta assim. A notação segue servername.databasename.schemaname.tablename. Se você estiver usando um servidor vinculado via odbc, omita databasename e schemaname, conforme ilustrado abaixo
    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