Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用方法时如何获取CA2100 SQL注入警告_C#_Sql_Sql Injection_Fxcop - Fatal编程技术网

C# 调用方法时如何获取CA2100 SQL注入警告

C# 调用方法时如何获取CA2100 SQL注入警告,c#,sql,sql-injection,fxcop,C#,Sql,Sql Injection,Fxcop,我有一个助手方法来防止大量的复制和粘贴。我想确保我的助手方法“MyExecuteSQLQuery”的调用方法将根据规则“CA2100:检查SQL查询的安全漏洞”进行检查。我怎样才能做到这一点 换句话说,我想得到一个CA2100警告: MyExecuteSQLQuery("update credentials set password = '" + password +"' where id = " + id); 助手方法: public static i

我有一个助手方法来防止大量的复制和粘贴。我想确保我的助手方法“MyExecuteSQLQuery”的调用方法将根据规则“CA2100:检查SQL查询的安全漏洞”进行检查。我怎样才能做到这一点

换句话说,我想得到一个CA2100警告:

MyExecuteSQLQuery("update credentials set password = '" + password +"' where id = " + id);
助手方法:

public static int MyExecuteSQLQuery(string sql, int timeout = 30)
{
    using (MySqlConnection con = new MySqlConnection(DBConnectionstring))
    {
        con.Open();
        using (MySqlCommand cmd = new MySqlCommand(sql, con))
        {
            if (timeout != 30)
            {
                cmd.CommandTimeout = timeout;
            }

            return cmd.ExecuteNonQuery();
        }
    }
}

我认为这不是个好主意。我认为可以将您的方法添加到分析器中,但是重构您的方法以采用
MySqlCommand
可能更容易,例如:

public static int MyExecuteSQLQuery(MySqlCommand cmd, int timeout = 30)
{
    using (MySqlConnection con = new MySqlConnection(DBConnectionstring))
    {
        con.Open();
        cmd.CommandTimeout = timeout;
        
        return cmd.ExecuteNonQuery();
    }
}
}


然后,当您构建
MySqlCommand

时,您会收到错误/警告。我认为这不是一个好主意。我认为可以将您的方法添加到分析器中,但是重构您的方法以采用
MySqlCommand
可能更容易,例如:

public static int MyExecuteSQLQuery(MySqlCommand cmd, int timeout = 30)
{
    using (MySqlConnection con = new MySqlConnection(DBConnectionstring))
    {
        con.Open();
        cmd.CommandTimeout = timeout;
        
        return cmd.ExecuteNonQuery();
    }
}
}


然后,当您构建
MySqlCommand

时,您会收到错误/警告您坚持将整个查询作为单个字符串提交,这从根本上打破了人们避免SQL注入的最佳能力。避免注入的最有效的方法是使用参数。你有没有考虑过使用像Dapper这样的方法而不是添加这样的方法?@Damien_The_unsiver我还有一个带有参数的helper方法,但是我想确保没有人会使用这个有SQL注入风险的助手方法。通过坚持将整个查询作为单个字符串提交,从根本上打破了人们避免SQL注入的最佳能力。避免注入的最有效的方法是使用参数。您是否考虑过使用像Dapper这样的方法而不是添加这样的方法?@Damien_The_Unsivers我也有一个带参数的helper方法,但我想确保没有人会使用这个helper方法而冒着SQL注入的风险。嗯,但这样称呼它更好:
MyExecuteSQLQuery(“更新x集a=1,其中b=2”);而不是:
使用(var sql=new MySqlCommand(“update x set a=1,其中b=2”))
{
MyExecuteSQLQuery(sql);`}好吧,但这样称呼它更好:
MyExecuteSQLQuery(“update x set a=1,其中b=2”);而不是:
使用(var sql=new MySqlCommand(“update x set a=1,其中b=2”))
{
MyExecuteSQLQuery(sql);`}