我正在运行一个C#函数来创建一个以用户输入命名的数据库。我想防止SQL注入。通常,我会使用参数,但参数只用于数据操作,而不用于数据创建。代码是:

using (var conn = new MySqlConnection(connStr))
{
    conn.Open();
    var comm = conn.CreateCommand();
    comm.CommandText = "CREATE DATABASE IF NOT EXISTS @name";
    comm.Parameters.AddWithValue("@name", id);
    comm.ExecuteNonQuery();
}

因为参数对于创建数据库不起作用,所以对输入进行消毒以防止注入的最佳方法是什么?
谢谢!

最佳答案

如果您不想/不能使用参数,请使用MySqlHelper.EscapeString("")
如果您定义参数,mySQL将使用内部参数。
所以你的命令应该看起来像

comm.CommandText = "CREATE DATABASE IF NOT EXISTS " + MySqlHelper.EscapeString(id);

关于c# - 用于数据创建的C#MySQL注入(inject)预防,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49873561/

10-11 05:19