哪种语句更好,更安全,以防止任何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";
或者有更好的方法吗? 赞赏你的帮助和意见。
答案 0 :(得分:3)
只有第一个会阻止SQL Injection攻击。
在第二个或第三个示例中,您不使用任何prepared statements和parameterized sql。我可以在18; DROP TABLE tblTableName
变量中将age
发送给他们。使用HttpUtility.HtmlEncode
方法创建带有html编码的字符串也无济于事。
也不要使用AddWithValue
方法。 可能有时会产生意外结果。使用.Add()
方法重载明确指定列类型和大小。
答案 1 :(得分:0)