2011-06-29 11 views
4

私は簡単なC#のWindowsフォームを使用してログインしますが、ユーザーのパスワードを変更するフォームもあります。ユーザーのパスワードの検証と変更

[パスワードの変更]をクリックすると、フォームに現在のパスワードのテキストボックス、新しいパスのパスと新しいパスの確認、および1つの保存ボタンが表示されます。

データベースから有効であるかどうかを確認できるように、私はラベルにusernameを保存しています。

私は私がこれまでに次のようにコードがあるの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 [email protected] where [email protected]"; 
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(); 

上記のコードの実行中に、パスワードの変更が、私がしたい:

  • ユーザーが現在のパスワードに間違ったパスワードを入力した場合などのチェックの検証。
  • newpasswordとパスワードを確認してください。
  • ユーザーが

「とパスワードを入力してください」どのようにこれを行うことができますか?というメッセージを与える必要があり、最初のデータベースに保存しないでください下の空白のパスワードを保存する上でクリックしたとき

+4

はプレーンテキストでパスワードを保存しないのに役立ちます。代わりに、安全なハッシュを使用してください。 – SLaks

+3

あなたはこれらのパスワードをハッシュしていますが、私たちの利益のためにパスワードを単純化しましたか?右!? –

+3

メンバーシップ認証だけを使用することをお勧めします。APIとすべてが付属しています。ホイールを再発明する必要はありません。 – BrokenGlass

答えて

3

これらのパスワードをプレーンテキストで保存しないでください。パスワードをハッシュし、ハッシュを保存する必要があります。次に、パスワードが正しいかどうかを確認したい場合は、ユーザーが入力したパスワードをハッシュし、ユーザー用に格納されているハッシュと比較します。

しかし、現在のユーザーのデータベースから値を取得するのに役立つように思えます。そこにこのようなものを置くことは、あなたのためにこれを行うべきです。上記のように、これは実際にはパスワードのハッシュを取得するのであって、プレーンテキストの実際のパスワードではないことに注意してください。

string sqlquery = "SELECT Password FROM [Member] where [email protected]"; 
SqlCommand cmd = new SqlCommand(sqlquery, connect); 
cmd.Parameters.AddWithValue("@username", label_username.Text); 
cmd.Connection = connect; 
string currentPassword = (string)cmd.ExecuteScalar(); 

if (currentPassword == textBox_Current.Text) 
{ 
// PASSWORD IS CORRECT, CHANGE IT, NOW. 
} else { 
// WOW EASY BUDDY, NOT SO FAST 
} 
0

まず、アプリケーションでパスワードハッシュを使用する必要があります。したがって、データベースのパスワードフィールドにハッシュ値が保持されている必要があります。 >ハッシュそれ - - あなたの目標を達成するために、これを仮定し

  1. は、あなたの文字列のユーザー名を考える>は、データベースに格納されているハッシュ値とユーザーのパスワードのハッシュ値が同じであるかどうかを確認するためにクエリを記述
  2. はあなたのコード内の文字列のパスワードや文字列NEWPASSWORDを考える - >ハッシュの両方 - >ハッシュ値が同じ
  3. は、文字列のパスワードや文字列を検討しているかどうかを確認NEWPASSWORD - >それぞれがnullまたは長さが0
であるかどうかを確認してください

また、あなたは、次の順序でこれらのタスクを実行する必要があります。

1 - > 3 - > 2

を希望これは...

0
protected void btn_PasswordChange(object sender, EventArgs e) 
    { 
     string constring = DataAccess.GetConnection(); 
     SqlConnection con = new `SqlConnection`(constring); 

     { 
      if (con.State != ConnectionState.Open) 
       con.Open(); 
     } 
     string str = "select * from tbl_MemberLogin where Password='" + txtoldpwd.Text + "'"; 
     DataTable DT = new DataTable(); 
     DT = objdut.GetDataTable(str); 
     if (DT.Rows.Count == 0) 
     { 
      lblmsg.Text = "Invalid current password"; 
      lblmsg.ForeColor = System.Drawing.Color.Red; 
     } 
     else 
     { 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandText = "update tbl_MemberLogin set Password='" + txtnewpwd.Text + "' where UserName='" + Session["UserName"].ToString() + "'"; 
      cmd.ExecuteNonQuery(); 
      lblmsg.Text = "Password changed successfully"; 
      lblmsg.ForeColor = System.Drawing.Color.Green; 
     } 
    } 
+0

コードにコンテキストを追加してください。コードのみの回答は、あなたがしたことを説明しておらず、答えとして役に立たない。 – creyD

関連する問題