首页 > 解决方案 > SQL 命令中使用的特殊元素的不正确中和(“SQL 注入”)

问题描述

我使用以下方法从我的应用程序中调用存储过程,并且它运行良好。主要问题是,当我在我的应用程序上运行 veracode 时,它​​给了我以下错误ExecuteReader

“SQL 命令中使用的特殊元素的不正确中和('SQL 注入')”

解决问题的参考如下,

“https://cwe.mitre.org/data/definitions/89.html”

如您所见,我的以下方法中没有静态查询,并且Parameters.Add已被调用以添加存储过程的参数。我之前通过遵循静态查询参数的参考链接解决方案解决了这个错误,但是在下面的方法中没有涉及到查询,所以我很困惑如何解决它。

谁能指导我解决此错误的解决方案?我不想更改调用存储过程的方法,因为它会影响我的整个生产应用程序。

public static List<Dictionary<string, object>> callProcForOutput(string procName, Dictionary<string, string> procParam, SqlConnection conn)
{
    List<Dictionary<string, object>> outvalues = new List<Dictionary<string, object>>();
    List<SqlParameter> parameters = new List<SqlParameter>();
    using (SqlCommand command = new SqlCommand(procName, conn))
    {
        procParam.ForEach(x => parameters.Add(new SqlParameter(x.Key, (object)x.Value)));

        command.CommandTimeout = 90;
        command.CommandType = CommandType.StoredProcedure;

        foreach (SqlParameter parameter in parameters)
        {
            command.Parameters.Add(parameter);
        }            

       
        command.Transaction = TransactionManager.TransManager.Transaction;

       
        SqlDataReader rdr = command.ExecuteReader();
        Dictionary<string, object> keyvalues = new Dictionary<string, object>();
        while (rdr.Read())
        {
            keyvalues = Enumerable.Range(0, rdr.FieldCount).ToDictionary(rdr.GetName, rdr.GetValue);
            outvalues.Add(keyvalues);
        }
        rdr.Close();
        return outvalues;
       
    }
}

标签: c#asp.net-mvcado.netsql-injectionveracode

解决方案


推荐阅读