在ASP.Net中防止SQL注入
|
我有这个代码 UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ Ref +"'' AND bookno = ''"+ Session("number") +"'' ')
我该如何防止SQL注入? UPDATE 这是我正在尝试的 SqlCommand cmd = new SqlCommand("Select * from Table where ref=@ref",con);
cmd.Parameters.AddWithValue("@ref",34);
由于某些原因,我尝试添加它似乎没有工作,我不断得到下面提到的SQL命令. 这是错误 'SqlCommand' is a type and cannot be used as an expression 我接管别人的工作,所以这对我来说都是新手,我想做正确的事情,所以如果任何人可以提供任何更多的帮助,如何使我的查询从SQL注入安全,那么请做. 更新2 我在代码中添加了VasilP这样说的 Dim dbQuery As [String] = "SELECT * FROM table WHERE ref = '" & Tools.SQLSafeString(Ref) & "' AND bookno = '" & Tools.SQLSafeString(Session("number")) & "'"
但是我收到一个错误工具没有声明我需要指定一个名字空间才能工作吗? UPDATE 有没有人有任何想法,最好的让我的查询从SQL注入安全,没有我遇到的错误? UPDATE 我现在有它所以它的工作没有参数位这里是我更新的源代码任何想法为什么它不会添加参数值? 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()
它像这样工作 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()
我得到的错误是这个 An error occurred while preparing a query for execution against OLE DB provider 'MSDASQL'. 这是因为它不是用69836替换@investor 有任何想法吗? 解 这是我如何解决我的问题 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()
现在我可以编写查询,而不用担心SQL注入 解决方法尝试使用 parameterized query这里是一个链接 http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/另外,不要使用OpenQuery …使用这个来运行选择 SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno 更多文章描述您的一些选项: http://support.microsoft.com/kb/314520 What is the T-SQL syntax to connect to another SQL Server? 编辑 注意:您的原始问题是询问分布式查询和链接服务器.此新语句不引用分布式查询.我只能假设你现在直接连接到数据库.这是一个应该有效的例子. SqlCommand cmd = new SqlCommand("Select * from Table where ref=@ref",con);
cmd.Parameters.Add("@ref",SqlDbType.Int);
cmd.Parameters["@ref"] = 34;
编辑: Ok Jamie taylor我会再次回答你的问题. 您正在使用OpenQuery,因为您可能正在使用链接的数据库 基本上问题是OpenQuery方法接受一个字符串,您不能传递一个变量作为发送到OpenQuery的字符串的一部分. 您可以像这样格式化您的查询.符号遵循servername.databasename.schemaname.tablename.如果您通过odbc使用链接的服务器,那么请省略databasename和schemaname,如下所示 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 (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 你如何指定在列表框中显示多少项目(高度)
- asp.net-mvc – 为什么在ASP.NET MVC中使用lambdas而不是反
- asp.net – ASP.NET中的“关键字不支持:”错误
- 如何在ASP.NET Web应用程序中打开一个SectionGroup?
- asp.net-mvc – 允许一个人一次使用帐户的可重用方式
- asp.net – 我们可以在视图状态中放置哪些类型的对象?
- asp.net-mvc-4 – 最小和最大字符串长度的单独错误消息 –
- asp.net-mvc – 当注入服务或控制器的依赖关系太多时,重构策
- IIS和ASP.Net Web开发服务器之间的行为差异?
- 在asp.net c#应用程序中使用Graphviz Dll
- asp.net中MVC借助Iframe实现无刷新上传文件实例
- ASP.NET 2.0和4.0似乎在Forms身份验证中以不同方
- ASP.NET Web应用程序本地化的最佳实践
- asp.net – 我应该使用WebMatrix构建一个真实世界
- 在ASP.NET中拒绝用户时,’CustomIdentity’上的S
- asp.net-mvc – 发现MVC项目中是否使用views / p
- asp.net – axd和ashx处理程序之间的区别
- 什么用于ASP.NET的成员资格
- .net – asp:GridView文本框始终返回空值
- asp.net-mvc – ASP.NET MVC Beta 1:DefaultMod
