c# - 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;
}
}
解决方案
推荐阅读
- javascript - Moment.js 无法识别 ISO 日期格式
- python - 当我从数组转换为 pandas.dataframe 时,如何在数据框中只添加一行
- java - Dagger2 - 如果没有 @Inject 构造函数或 @Provides-annotated 方法,则无法提供
- sql-server - datediff 函数导致溢出消息
- google-apps-script - 下载大 CSV 文件并放入 Google 表格
- android - 小吃店在解雇时留下一条白线
- cuda - 如何在 CUDA Fortran 中使用 cusparse 库的 gtsv2 函数?
- php - Codeigniter 分页不显示分页
- ios - Xcode 10“dyld:找不到符号:__T0BOWV”如何修复?
- javascript - 选中复选框时更改 div 的背景颜色和字体颜色