SQL注入哪个语句更好,更安全?

时间:2015-03-10 07:13:30

标签: c# asp.net sql-injection

哪种语句更好,更安全,以防止任何SQL注入,或者它们是否相同?

com.CommandText = "update tblTableName set Name=@name, Age=@age WHERE ID=1";
com.Parameters.AddWithValue("@name", name.ToString());
com.Parameters.AddWithValue("@age", age.ToString());

OR

com.CommandText = @"update tblTableName set Name=" + name.ToString() + ", Age=" + age.ToString() + " WHERE ID=1";

OR

com.CommandText = "update tblTableName set Name=" + HttpUtility.HtmlEncode(name.ToString()) + ", Age=" + age.ToString() + " WHERE ID=1";

或者有更好的方法吗? 赞赏你的帮助和意见。

2 个答案:

答案 0 :(得分:3)

只有第一个会阻止SQL Injection攻击。

在第二个或第三个示例中,您不使用任何prepared statementsparameterized sql。我可以在18; DROP TABLE tblTableName变量中将age发送给他们。使用HttpUtility.HtmlEncode方法创建带有html编码的字符串也无济于事。

也不要使用AddWithValue方法。 可能有时会产生意外结果。使用.Add()方法重载明确指定列类型和大小。

阅读:Can we stop using AddWithValue() already?

答案 1 :(得分:0)