嗨,我从下拉列表中获取ID值,并将其传递给方法后面的代码,该方法将值传递给sql进行某些操作。

我想知道这是否是正确的方法。

如果不是,那么为什么不这样做,以及有人如何通过sql injection注入它,这将是解决方案。

   protected void Drop1_SelectedIndexChanged(object sender, EventArgs e)
            {
               int abcID;
                    abcID= Convert.ToInt32(drop1.SelectedItem.Value);

    string sc = "SELECT dddd FROM table1 WHERE abcID NOT IN("
                    +  abcID + ")";

                using (SqlDataSource ds = new SqlDataSource(ConnectionString(), sc ))
                {
    }

最佳答案

由于您在用户发送的值上使用Convert.ToInt32,因此不会发生SQL注入。无效的值将引发异常。

但是,使用参数化查询通常是一个好习惯。
这样,即使字符串值也将是安全的。

SqlCommand command = new SqlCommand("SELECT dddd FROM table1 WHERE abcID NOT IN(@myID)");
command.Parameters.AddWithValue("@myID", abcID);

关于c# - 这可以成为SQL注入(inject)的受害者吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16517867/

10-11 21:40