SonarQube报告存储过程名称的SQL注入

时间:2018-05-16 15:32:04

标签: sql-server sonarqube sql-injection .net-4.6

我已经开始使用SonarQube进行静态分析。它向我报告了很多SQL注入漏洞,但它看起来像是false positive

让我们说需要在数据库上运行程序。程序名称取自配置。

SonarQube正在报道:

Make sure to sanitize the parameters of this SQL command.

示例代码:

using (SqlCommand cmd = new SqlCommand(procName, Connection))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@param", SqlDbType.NVarChar, 32)).Value = record;
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
    }
}

可以在程序名称上注入任何SQL吗?该名称是否需要消毒?

1 个答案:

答案 0 :(得分:1)

我承认S3649的实现并不是最聪明的,如果将非常量字符串传递给CommandText的{​​{1}}属性,则会引发问题,或者相应的ctor论证。

如果您确定SqlCommand的值不是来自潜在可利用的来源,例如例如,查询字符串参数,处理此特定问题的最佳方法是在SonarQube中将其标记为CommandText。如果您还在连接模式下使用SonarLint进行此项目,它将自动禁止该问题显示在IDE中。

另一方面,如果值可能来自可利用的来源,例如查询字符串参数,请求正文,cookie,标题等,则设置Won't Fix仍然不足以阻止攻击者执行数据库上的存储过程与您预期的不同...在这种情况下,如果为存储过程创建单独的包装器方法可能会更好,从而防止潜在的攻击者选择要执行的其他SP。