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

时间:2015-04-13 17:47:14

标签: c# sql parameters sql-injection sqlparameter

                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注入?

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

1 个答案:

答案 0 :(得分:2)

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

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

除了安全性之外,如果您只想知道记录是否存在,那么使用COUNT并使用ExecuteScalar获取结果,而不是选择所有列。

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

并将结果显示为:

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