通过使用数据类型int所需的参数来防止sql注入

时间:2013-07-18 09:52:20

标签: .net sql-injection

再次问题: 我们是否真的需要将数字类型变量值作为参数传递以防止sql注入。

我有两个带参数的样本函数,然后没有使用参数

function CheckThis(int UIN)
{
  var connect = ConfigurationManager.ConnectionStrings["NorthWind"].ToString();
  var query = "Select * From Products Where ProductID = @ProductID";
  using (var conn = new SqlConnection(connect))
  {
    using (var cmd = new SqlCommand(query, conn))
    {
      cmd.Parameters.Add("@ProductID", SqlDbType.Int);
      cmd.Parameters["@ProductID"].Value = UIN;
      conn.Open();
      //Process results
    }
  }
}

OR正在关注

function CheckThis(int UIN)
{
  var connect = ConfigurationManager.ConnectionStrings["NorthWind"].ToString();
  var query = "Select * From Products Where ProductID = " + UIN;
  using (var conn = new SqlConnection(connect))
  {
    using (var cmd = new SqlCommand(query, conn))
    {
      //cmd.Parameters.Add("@ProductID", SqlDbType.Int);
      //cmd.Parameters["@ProductID"].Value = UIN;
      conn.Open();
      //Process results
    }
  }
}

1 个答案:

答案 0 :(得分:3)

您无需停止SQL注入攻击 1 。但是:

  • 如果将SQL与值
  • 分开,则代码更清晰
  • 如果稍后将类型从int更改为其他类型,则然后将面临注入攻击的风险,并且完全有可能在代码审核中错过< / LI>
  • 它避免了涉及意外数千个分隔符等的数字到字符串转换的任何问题

简而言之,我肯定会使用参数。


1 除非您的攻击者也会影响您的区域设置。那时,even string concatenation with integers can be vulnerable to SQL injection attacks