SQL 注入哪个语句更好更安全?
Which statement is better and more secure for 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());
或
com.CommandText = @"update tblTableName set Name=" + name.ToString() + ", Age=" + age.ToString() + " WHERE ID=1";
或
com.CommandText = "update tblTableName set Name=" + HttpUtility.HtmlEncode(name.ToString()) + ", Age=" + age.ToString() + " WHERE ID=1";
或者有更好的方法吗?
感谢您的帮助和意见。
只有第一个可以防止 SQL Injection 次攻击。
您在第二个或第三个示例中没有使用任何 prepared statements and parameterized sql。我可以在您的 age
变量中发送 18; DROP TABLE tblTableName
。使用 HttpUtility.HtmlEncode
方法创建 html 编码的字符串也无济于事。
也不要使用AddWithValue
方法。有时 可能 会产生意想不到的结果。使用 .Add()
方法重载来明确指定您的列类型和大小。
首先,它可以防止 sql 注入。
http://www.c-sharpcorner.com/UploadFile/puranindia/parameterized-query-and-sql-injection-attacks/
哪个语句可以更好更安全地防止任何 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());
或
com.CommandText = @"update tblTableName set Name=" + name.ToString() + ", Age=" + age.ToString() + " WHERE ID=1";
或
com.CommandText = "update tblTableName set Name=" + HttpUtility.HtmlEncode(name.ToString()) + ", Age=" + age.ToString() + " WHERE ID=1";
或者有更好的方法吗? 感谢您的帮助和意见。
只有第一个可以防止 SQL Injection 次攻击。
您在第二个或第三个示例中没有使用任何 prepared statements and parameterized sql。我可以在您的 age
变量中发送 18; DROP TABLE tblTableName
。使用 HttpUtility.HtmlEncode
方法创建 html 编码的字符串也无济于事。
也不要使用AddWithValue
方法。有时 可能 会产生意想不到的结果。使用 .Add()
方法重载来明确指定您的列类型和大小。
首先,它可以防止 sql 注入。
http://www.c-sharpcorner.com/UploadFile/puranindia/parameterized-query-and-sql-injection-attacks/