Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确认正确使用代码以防止SQL注入和正确使用using语句_C#_Mysql_Database - Fatal编程技术网

C# 确认正确使用代码以防止SQL注入和正确使用using语句

C# 确认正确使用代码以防止SQL注入和正确使用using语句,c#,mysql,database,C#,Mysql,Database,有人能告诉我我是否通过使用.Parameters.Add.解决了恶意SQL注入问题吗。。是否正确以及我是否正确使用了using语句?是的,您使用的代码从Sql注入的角度来看是安全的。参数可防止恶意用户成功入侵数据库 using语句使用正确,将确保对数据库的适当资源利用 但是,有两点可以改变,以便采用更好的方法: 第一:将连接字符串存储在配置文件中并读取 从那里开始。没有必要再次构建相同的字符串 一次又一次。我甚至没有开始谈论如果你 在这方面需要做些改变。如果你硬编码的话 在你的程序中,你需要在

有人能告诉我我是否通过使用.Parameters.Add.解决了恶意SQL注入问题吗。。是否正确以及我是否正确使用了using语句?

是的,您使用的代码从Sql注入的角度来看是安全的。参数可防止恶意用户成功入侵数据库

using语句使用正确,将确保对数据库的适当资源利用

但是,有两点可以改变,以便采用更好的方法:

  • 第一:将连接字符串存储在配置文件中并读取 从那里开始。没有必要再次构建相同的字符串 一次又一次。我甚至没有开始谈论如果你 在这方面需要做些改变。如果你硬编码的话 在你的程序中,你需要在许多地方和地方进行更改 重新分发您的程序
  • 第二:众所周知,AddWithValue是邪恶的。你可以读到它 在很多地方,但我发现。相反 使用
    old_cmd.Parameters.Add(“@user”,MySqlDbType.VarChar).Value=
    老用户

@stickybit关于这个问题,我看到了很多相反的观点。尤其是在平台上。将密码存储为纯文本与您希望避免的任何其他恐怖行为一样糟糕@ŇssaPøngjǣrdenlarp数据库中不存储密码。所有密码都存储在一个字符串中,然后在会话结束或应用程序关闭后被清除。AddWithValue仍然不是邪恶的,它只有一些限制与MySQL一起使用时,
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);
   }
}