请求确认SAST扫描标记SqlCommand行的SQL注入风险是否为误报
这确实是SAST工具的误报
你的代码实现完全符合防御SQL注入的安全标准,不存在「SQL命令中特殊元素未正确中和」的风险,具体依据:
- 存储过程名称
SP_abc为硬编码固定值,未引入任何用户可控的输入,不存在被注入篡改的可能 - 明确设置
cmd.CommandType = CommandType.StoredProcedure,指定SqlCommand执行的是存储过程而非动态SQL - 所有查询参数均通过
SqlParameter添加,采用参数化查询模式,彻底分离了输入数据与SQL命令结构,从根源上杜绝了SQL注入
SAST工具的误报源于其静态扫描的局限性:它仅检测到new SqlCommand(SP)这一行代码,未关联分析后续设置命令类型和添加参数的完整逻辑,属于规则覆盖不全导致的误判。
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); }
内容的提问来源于stack exchange,提问作者snowfrost
相关产品推荐
相关产品推荐

