1

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

2 回答 2

2

是的,这段代码不会受到 SQL 注入的影响。

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

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

于 2013-04-24T22:12:00.537 回答
1

最佳实践是使用 SQL 参数。使用 SqlParameterCollection (如您的示例:)SqlCmd.Parameters自动为您提供:

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

还有一些额外的最佳实践,包括:

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

您将在此OWASP SQL 注入预防备忘单中找到进一步描述的最佳实践。

于 2013-04-24T22:28:44.653 回答