C# 确认正确使用代码以防止SQL注入和正确使用using语句
有人能告诉我我是否通过使用.Parameters.Add.解决了恶意SQL注入问题吗。。是否正确以及我是否正确使用了using语句?是的,您使用的代码从Sql注入的角度来看是安全的。参数可防止恶意用户成功入侵数据库 using语句使用正确,将确保对数据库的适当资源利用 但是,有两点可以改变,以便采用更好的方法:C# 确认正确使用代码以防止SQL注入和正确使用using语句,c#,mysql,database,C#,Mysql,Database,有人能告诉我我是否通过使用.Parameters.Add.解决了恶意SQL注入问题吗。。是否正确以及我是否正确使用了using语句?是的,您使用的代码从Sql注入的角度来看是安全的。参数可防止恶意用户成功入侵数据库 using语句使用正确,将确保对数据库的适当资源利用 但是,有两点可以改变,以便采用更好的方法: 第一:将连接字符串存储在配置文件中并读取 从那里开始。没有必要再次构建相同的字符串 一次又一次。我甚至没有开始谈论如果你 在这方面需要做些改变。如果你硬编码的话 在你的程序中,你需要在
- 第一:将连接字符串存储在配置文件中并读取 从那里开始。没有必要再次构建相同的字符串 一次又一次。我甚至没有开始谈论如果你 在这方面需要做些改变。如果你硬编码的话 在你的程序中,你需要在许多地方和地方进行更改 重新分发您的程序
- 第二:众所周知,AddWithValue是邪恶的。你可以读到它
在很多地方,但我发现。相反
使用
old_cmd.Parameters.Add(“@user”,MySqlDbType.VarChar).Value= 老用户代码>
AddWithValue
不是邪恶的;请参阅@BradleyGrainger(我回复了您,但我应该写信给doc页面的作者),当存在一个不太麻烦的API时,为什么要使用一个众所周知的有问题的API?如果这个假设的开发人员需要将代码移植到另一个数据库,该怎么办?我更喜欢使用Add并忘记AddWithValue,即使对于MySql也是如此。您认为我在利用MySql数据库性能方面有什么不足吗?从文章中我们不清楚AddWithValue是否比Add有其他优势。@Steve谢谢你的帮助。我注意到你也对我的第一篇帖子发表了评论,那是很久以前的事了,所以谢谢你的回复@Steve在MySQL开发人员中,它不是一个“众所周知的有问题的API”(这就是为什么它一直被广泛使用的原因)。这是一种添加新参数的简洁(且自文档化)方法,我认为没有理由避免完美的MySQL代码,因为它在与SQL Server一起使用时可能会导致问题。在我看来,不同的DB服务器之间存在着太多的差异(特别是如果您也在编写原始SQL的话!),因此尝试使用最通用的ADO.NET代码是不值得的——以防您进行移植,这是不太可能的。
else if(updated_password == confirm_password)
{
old_user = textBox1.Text;
old_pass = textBox2.Text;
confirm_password = textBox4.Text;
using (var old_connection = new MySqlConnection("server=localhost;user id=" + old_user + ";database=DB;password=" + old_pass))
{
old_connection.Open();
string sql = "ALTER USER @user @'localhost' IDENTIFIED BY @newPass";
MySqlCommand old_cmd = new MySqlCommand(sql, old_connection);
old_cmd.Parameters.AddWithValue("@user", old_user);
old_cmd.Parameters.AddWithValue("@newPass", confirm_password);
old_cmd.ExecuteNonQuery();
MessageBox.Show("Password changed successfully.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}