提问人:jpatel 提问时间:8/31/2023 最后编辑:jpatel 更新时间:9/1/2023 访问量:120
Checkmarx在数据库命令中使用AddInParameter方法从 ASP.NET 中的resx文件添加参数查询时出现SQL注入错误
SQL Injection Error from Checkmarx using AddInParameter method in database command to add parameter query from a resx file in ASP.NET
问:
这是我的代码:
DataTable proposedDealTable = new DataTable();
if (accountGroupList != null && accountGroupList.Count > 0)
{
Database database = SqlServerUtility.CreateDatabase();
string sqlQuery = DealQueries.GetTestExpanded + " ";
sqlQuery += DealQueries.GetTestExpandedWhereClauseCashBalances;
string inClause = CommonUtility.ConvertListToCsvString(accountGroupList.ConvertAll(c => c.i_account_group_id.ToString()));
sqlQuery = sqlQuery.Replace("@i_account_group_id_list", inClause);
DbCommand dbCommand = database.GetSqlStringCommand(sqlQuery.Replace("testSchemaName",
ConfigurationManager.AppSettings["SchemaName"].ToString()));
database.AddInParameter(dbCommand, "@s_row_insrt", DbType.DateTime2, localDayStartTimeInUtc);
database.AddInParameter(dbCommand, "@localdate", DbType.DateTime2, localdate.Date);
database.AddInParameter(dbCommand, "@dealtype", DbType.String, DealTypesClassification.IF);
dbCommand.CommandTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["SqlServerCommandTimeout"]);
DataSet dataSet = database.ExecuteDataSet(dbCommand);
proposedDealTable = dataSet.Tables[0];
}
复选标记扫描警报:
在 test-home 上发现一个 SQL 注入漏洞。
应用程序的方法在 \Service\Access\Dao\DealsDao.cs 的第 92 行使用 执行 SQL 查询。应用程序通过嵌入不受信任的 字符串添加到查询中,但未进行适当的清理。串联的字符串被提交到数据库,在那里它被解析并相应地执行。
攻击者可以通过构建恶意负载并通过输入请求提供恶意负载,将任意语法和数据注入 SQL 查询;然后,GetDeals 方法在 \Services\Imple\CService.cs 的第 59 行读取此输入。然后,此输入流经代码,进入查询并流向数据库服务器 - 无需清理。这可能会引发 SQL 注入攻击。GetDealsCBalances
dbCommand
是代码问题吗?还是复选标记扫描问题?请建议是否需要更改代码。
答: 暂无答案
评论
SchemaName
dbo.Users; --
'RealSchema,
sqlQuery.Replace("@i_account_group_id_list", inClause)
var sales=connection.Query<Sale>("SELECT * from Sales where Region=@region and categoryID in (@categories)",new {Region="Blah", categories=new[]{1,5,8})
IN