防御T-SQL注入

本文关键字:注入 T-SQL 防御 | 更新日期: 2023-09-27 18:10:50

如果这看起来是一个愚蠢的问题,那么很抱歉,但是使用参数如何防御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;

防御T-SQL注入

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

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

如果你要构造一个字符串,SQL不能知道值是什么,查询是什么,必须完全依赖于语法。

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

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

还有一些其他的最佳实践,包括:

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

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