不正确地中和 SQL 命令中使用的特殊元素 - 使用存储过程

Improper Neutralization of Special Elements used in an SQL Command-Using Stored Procedure

提问人:snowfrost 提问时间:11/8/2023 最后编辑:marc_ssnowfrost 更新时间:11/8/2023 访问量:36

问:

将需要您对以下编码的建议。我的程序通过了静态应用安全测试,并进行了

cmd = new SqlCommand(SP);

被标记为

不正确地中和 SQL 命令中使用的特殊元素。

我假设这是一个误报,因为我使用的是参数化查询和存储过程。只需要确认即可。谢谢。

private DataSet ExecuteC()
{
    SqlCommand cmd = null;
    
    DateTime startDateMonth = DateTime.Now.AddMonths(-Properties.Settings.Default.ModifiedMonthsBacklog);
    DateTime startDate = new DateTime(startDateMonth.Year, startDateMonth.Month, 1);
              
    string SP = "SP_abc";
    cmd = new SqlCommand(SP);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@dStartDate", startDate));
    cmd.Parameters.Add(new SqlParameter("@dEndDate", endDate));
         
    return ExecuteConnection(cmd, exportType);
}
C# SQL Server 安全性

评论

0赞 Zohar Peled 11/8/2023
我不确定该标志的含义,但有几件事可以立即在您的代码中改进:1. SqlCommand 是一个 - 所以为它添加一个语句和 2.使用 that 的重载,接受参数名称和类型,而不是显式创建 SqlParameter 的新实例,然后流畅地添加它们各自的值。(所以IDisposableusingAddcmd.Parameters.Add("@dStartDate", SqlDbType.DateTime).Value = startDate)
0赞 Panagiotis Kanavos 11/8/2023
被什么标记?这不是一个 ADO.NET 信息。是的,这是一个误报。顺便说一句,没有理由在顶部定义变量。事实上,这可能会导致严重的错误,因为它扩大了变量的范围,并可能导致意外重用变量的内容。 更好cmdvar cmd = new SqlCommand(SP);
1赞 Charlieface 11/8/2023
如果你声明它,也许它不会触发const string
0赞 snowfrost 11/8/2023
由 Semgrep 标记。注意到上面的评论,我可以改进它.
0赞 Charlieface 11/8/2023
@PanagiotisKanavos Or One 希望连接也不会被缓存。using var cmd = ...

答: 暂无答案