防御T-SQL注入

时间:2013-04-24 22:09:45

标签: c# sql sql-server tsql code-injection

如果这似乎是一个愚蠢的问题,请道歉但是如何使用参数防止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;

2 个答案:

答案 0 :(得分:2)

是的,这段代码可以安全地从SQL注入。

原因是当使用参数时,您将项目作为值传递给服务器,它们将被解释为。

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

答案 1 :(得分:1)

最佳做法是使用SQL参数。使用SqlParameterCollection(如示例中所示:SqlCmd.Parameters)会自动为您提供:

  1. 类型检查
  2. 长度验证
  3. 输入被视为文字值而不是可执行代码
  4. 处理通常涉及SQL注入攻击的特殊字符
  5. There are some additional best practices,包括:

    • 约束和清理输入数据
    • 使用数据库中具有受限权限的帐户
    • 避免披露数据库错误信息

    您可以在OWASP SQL Injection Prevention Cheat Sheet找到进一步描述的最佳做法。