C# Sonarqube表示违反csharpsquid:S3649-在SQL语句中使用之前,应先清除用户提供的值
在对代码的sonarqube扫描中,我发现了一些违反csharpsquid:S3649的情况——在SQL语句中使用之前,应该对用户提供的值进行清理。我认为我的代码是兼容的,其他人能解释为什么这被标记为不兼容吗C# Sonarqube表示违反csharpsquid:S3649-在SQL语句中使用之前,应先清除用户提供的值,c#,sonarqube,C#,Sonarqube,在对代码的sonarqube扫描中,我发现了一些违反csharpsquid:S3649的情况——在SQL语句中使用之前,应该对用户提供的值进行清理。我认为我的代码是兼容的,其他人能解释为什么这被标记为不兼容吗 string connectionString = DatabaseContext.GetiXDataConnectionString(); string sql = "SELECT UserID FROM SystemUsers " + "Where Wind
string connectionString = DatabaseContext.GetiXDataConnectionString();
string sql = "SELECT UserID FROM SystemUsers " +
"Where WindowsLogonName = @WindowsLogon and DomainName = @WindowsDomain and " +
"[Disabled] = 0";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.Add(new SqlParameter("@WindowsLogon", windowsUsername));
cmd.Parameters.Add(new SqlParameter("@WindowsDomain", userDomain));
object queryResult = cmd.ExecuteScalar();
if (queryResult != null)
return queryResult.ToString();
}
}
它会抱怨,因为sql变量不是常量。如果将代码更改为通常不是坏事的代码,则问题将消失:
常量字符串sql=…+…+。。。;
S3649是一个非常简单的规则,当执行的SQL不是常量字符串时会引发该规则。这远不是一个真正的污染分析检查,但它可以捕捉到最简单和最明显的错误