2013-04-24 40 views
1

道歉,如果这似乎是一个愚蠢的问题,但如何使用参数抵御SQL注入和什么有关最佳做法,以T-SQL:抵御T-SQL注入

例如:这是最好的做法呢?

SqlCommand SqlCmd = new SqlCommand("SQL Command @X ....... @Y"); 
SqlCmd.CommandType = CommandType.Text; 
SqlCmd.Parameters.AddWithValue("@X", SqlDbType.VarChar).Value = X; 
SqlCmd.Parameters.AddWithValue("@Y", SqlDbType.date).Value = Y; 
SqlCmd.Connection = ConnectionString; 
+0

谢谢,但我也对一般最佳实践感兴趣,并且评论提到了溢出问题。等等。? – TheIdiot 2013-04-24 22:19:36

回答

1

最佳做法是使用SQL参数。使用SqlParameterCollection(如你的例子:SqlCmd.Parameters)将自动为您提供:

  1. 类型检查
  2. 长度验证
  3. 输入将被视为文字值而不是可执行代码的特殊
  4. 处理通常涉及SQL注入攻击的字符

There are some additional best practices包括:

  • 约束和净化输入数据
  • 使用数据库中的
  • 避免了受限制的权限披露数据库错误信息

你会发现在这个OWASP SQL Injection Prevention Cheat Sheet进一步说明这些最佳实践的账户。

+0

谢谢最后一个链接特别有用。 – TheIdiot 2013-04-24 23:02:43

2

是的,这段代码是安全的SQL注入。

原因是,当使用参数处理您的项目作为值传递给您的服务器,他们将被解释为这样。

如果要构造一个字符串,SQL无法知道该值是什么以及该查询是什么,并且必须纯粹依赖语法。

相关问题