这种使用SQLParameter的方式是否会使我的函数获得SQL注入证明?

时间:2019-03-07 17:23:08

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

下面是一些简单的代码,用于在TargetColumn中搜索值,其中SourceColumn = SourceValue。

以下是这些代码:

        string cmdText = "select * from " + TableName + " where " + SourceColumn + " = '" + SourceValue + "'";
        SqlCommand dbCommand = new SqlCommand(cmdText, dbConnection);
        SqlParameter sqlParam = new SqlParameter("@" + SourceColumn,  SourceValue);
        dbCommand.Parameters.Add(sqlParam);
        SqlDataReader dbReader = dbCommand.ExecuteReader();
        dbReader.Read();
        string _targetValue = dbReader[TargetColumn].ToString();
        dbReader.Close();
        dbCommand.Dispose();
        return _targetValue;

我的问题是:

  1. 我使用SqlParameter将SourceColumn和SourceValue传递给SqlCommand,这会使它成为SQL注入证明吗?
  2. 出于SQL安全目的,我是否还需要同时使用TargetColumn和SqlParameter? (但它适用于SqlDataReader)
  3. 如果我将SqlParameter用于SqlCommand,是否还需要在字符串中编写命令文本,然后在使用SqlParameter之前将其传递给SqlCommand?
  4. 为什么我需要为SourceColumn添加一个“ @”? (我只是按照教程并添加了它)为什么SourceValue不需要“ @”?

以上代码可以很好地返回期望值,但是我不确定上述问题。

非常感谢!

0 个答案:

没有答案