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
}
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
}