【发布时间】:2011-09-24 18:46:45
【问题描述】:
我有一个简单的 C# windows 窗体,它用作登录,但也有一个用于更改用户密码的窗体。
当您点击更改密码时,表单会加载一个包含当前密码、新密码和确认新密码的文本框,以及一个保存按钮。
我已将用户名存储在标签中,以便可以检查当前密码是否在数据库中有效。
我将这些存储在我在 Microsoft SQL Server 2008 中创建的表中。
目前代码如下。
SqlConnection connect = new SqlConnection(str);
connect.Open();
string username = label_username.Text;
string password = textBox_Current.Text;
string newPassword = textBox_New.Text;
string confirmPassword = textBox_Verify.Text;
string sqlquery = "UPDATE [Member] SET Password=@newpass where Username=@username";
SqlCommand cmd = new SqlCommand(sqlquery, connect);
cmd.Parameters.AddWithValue("@newpass", textBox_Verify.Text);
cmd.Parameters.AddWithValue("@username", label_username.Text);
cmd.Parameters.AddWithValue("@password", textBox_Current.Text);
cmd.Connection = connect;
cmd.ExecuteNonQuery();
sqlDataReader reader = null;
reader = cmd.ExecuteReader();
while (reader.Read())
{
if ((textBox_New.Text == reader["newPassword"].ToString()) & (textBox_Verify.Text == (reader["confirmPassword"].ToString()))) { }
}
MessageBox.Show("Password Changed Successfully!");
this.Close();
在执行上述代码时,密码更改但我想:
- 检查验证,就像用户在当前密码中输入了错误的密码一样。
- 新密码并确认密码。
- 当用户点击第一次保存底部空白密码时,不应存储在数据库中,而应给出消息“请输入密码”
如何做到这一点?
【问题讨论】:
-
不要以纯文本形式存储密码。相反,请使用安全哈希。
-
您肯定在对这些密码进行哈希处理,而且您只是为了我们的利益而对其进行了简化,对吧?对吧!?
-
我建议只使用会员身份验证,附带 API 和一切,无需重新发明轮子
-
我强烈建议您的查询不要基于用户名本身,而是使用某种类型的用户 ID。否则请确保给定的用户名只能使用一次...