ADO选择语句与全文搜索与SQL注入

本文关键字:搜索 SQL 注入 文搜索 选择 语句 ADO | 更新日期: 2023-09-27 18:15:06

我要连接到的数据库有一个全文搜索索引表。这可以正常工作。

select * from MyTable where contains(*, 'value')

在WPF中,如果我发送确切的命令,它会工作。然而,value不是硬编码的,它是用户类型的东西,所以它需要保护SQL注入。问题是这样做不会返回结果。这是我的代码;

DataTable dt = new DataTable();
        string ConString = "Data Source=127.0.0.1,1433;Initial Catalog=MyDB;User Id=sa;Password=amazingSecurePassword;";
        using (SqlConnection con = new SqlConnection(ConString))
        {
            string sqlCMD = "select * from MyTable where contains(*, @s1)"
            SqlCommand cmd = new SqlCommand(sqlCMD, con);
            SqlDataAdapter da = new SqlDataAdapter();
            try
            {
                con.Open();
                cmd = new SqlCommand(sqlCMD, con);
                cmd.Parameters.Add(new SqlParameter("@s1", "value"));
                da.SelectCommand = cmd;
                da.Fill(dt);
                con.Close();
            }
            catch (Exception x)
            {
                //Error logic
            }
            finally
            {
                cmd.Dispose();
                con.Close();
            }
        }
编辑:@Mike的评论起作用了。修改SqlDbType。NVarChar修复了

ADO选择语句与全文搜索与SQL注入

如上所述,在创建SqlParameter期间将SQlDbType设置为NVarChar有助于CLR确定正确的数据类型。关于SqlParameter构造函数的更多信息,请参见MSDN。