c# 这是登录表单的安全方式吗?

c# Is this a safe way for a login form?

                myConnection.Open();
            myString = textBox2.Text;
            myPass = textBox1.Text;
            MessageBox.Show("Connection established!", "Succes!", MessageBoxButtons.OK);
            using (MySqlCommand looking = new MySqlCommand("Select * FROM `users` WHERE username LIKE @User AND password LIKE @password", myConnection))
            {
                looking.Parameters.Add(new MySqlParameter("User", myString));
                looking.Parameters.Add(new MySqlParameter("password", myPass));
                MySqlDataReader readData = looking.ExecuteReader(); 

                while(readData.Read()) 
                {
                    login = true;
                }
if (login)
   MessageBox.Show("Succes!");
}

嗨!我想知道上面的代码是否是登录表单的安全方式?可以在这里进行 SQL 注入吗?

另外,如何安全地保存我的连接字符串?我一直在四处寻找,但我不知道最好的选择..

SQL 注入是安全的,但是 你应该比较完全匹配而不是使用 LIKE 作为用户名和密码。

"Select * FROM `users` WHERE username = @User AND password = @password"

除了安全之外,如果您只想知道记录是否存在,则使用 COUNT 并使用 ExecuteScalar 而不是 select 所有列来获取结果.

"Select COUNT(*) FROM `users` WHERE username = @User AND password = @password"

并得到如下结果:

int count = (int) looking.ExecuteScalar();
if(count > 0)
{
   //found
}