2017-05-01 6 views
0

こんにちは私はログインフォームで作業しています。私は自分のウェブサイト上のアカウントにサインアップできますが、ユーザー名とパスワードを入力するとログインできません。私は2つのコードを比較していると思われるコードをいくつか持っていますが、何らかの理由で動作していないだけです。ここに私のコードです。何らかの理由でコードの最後にwhileループを実行することさえありません。どんな助けもありがたいですログイン資格を比較してください

private bool CompareStrings(string string1, string string2) 
{ 
    return String.Compare(string1, string2, true, System.Globalization.CultureInfo.InvariantCulture) == 0 ? true : false; 
} 

public void LogInAccount(string UserName, string UserPassword, Label InvalidLogIn) 
{ 
    connection.ConnectionString = @"Connection String"; 
    connection.Open(); 

    string compare = "select ISNULL(UserName, '') As UserName, ISNULL(UserPassword, '') As UserPassword from SignUp where UserName= @UserName"; 

    SqlCommand CompareUser = new SqlCommand(compare, connection); 
    //SqlCommand Command2 = new SqlCommand("select * from SignUp where FirstName= @FirstName", connection); 

    //Command2.Parameters.AddWithValue("@FirsName", FirstName.Text); 

    CompareUser.Parameters.AddWithValue("@UserPassword", UserPassword); 
    CompareUser.Parameters.AddWithValue("@UserName", UserName); 

    SqlDataReader dr = CompareUser.ExecuteReader(); 

    //string User = UserName; 
    //string UserPassword = Password; 

    //HtmlAnchor LogIn = (HtmlAnchor)Master.FindControl("LogIn"); 
    //HtmlAnchor SignUp = (HtmlAnchor)Master.FindControl("SignUp"); 

    while (dr.Read()) 
    { 
     if (this.CompareStrings(dr["UserName"].ToString(), UserName) && 
      this.CompareStrings(dr["UserPassword"].ToString(), UserPassword)) 
     { 
      InvalidLogIn.Visible = false; 
      FormsAuthentication.RedirectFromLoginPage(UserName, true); 
     } 
     else 
     { 
      InvalidLogIn.Visible = true; 
     } 
    } 

    connection.Close(); 
} 
+0

お返事ありがとうございました。私は実際にそれを試みましたが、残念ながらそれは動作しませんでした。それは私がちょうど今キャッチしていない何かが奇妙です –

+0

SQLコードは有効です(物事の全体的な意味を変更する@のための必要はありません。) –

+0

面白いどのようにユーザーをログインさせていない来ています。私はwhileループを実行しなくてもデバッグすることができます。コード以外のものと関係があると思われますか?ありがとうございます –

答えて

0

ちょうど私がそこに投げ捨てるもの:本当にこのようなユーザー名/パスワードを比較すべきではありません。

は、ログイン認証の基本的な考え方はこれです:パスワードが作成されるとき

  1. 値をハッシュ化されたユーザーがログインしようとすると テーブル
  2. に格納され、彼らはを提出パスワード
  3. パスワードがハッシュされました
  4. ハッシュ(試行)がデータベースのエントリと比較されます。

...コードを正しく読んでいると、パスワードがSQLのプレーンテキストで保存されているようです。そしてあなたのクエリは値を取得し、それをC#で比較します。

私は間違ってはいけません。これはちょっとした個人的なサイトであり、パスワードテーブルにはあなたのエントリだけがありますか?それでは問題ありません。しかし、あなたのサイトにユーザー名/パスワードを入れている人がいれば、本当に自分のデータを保護する必要があります。

+0

これは大規模なサイトでは、個人的なサイトを計画しています。私はSQLデータベースのテーブルにパスワードをハッシュする方法を探していた。多分あなたが私を助けることができます。私はtextmodeパスワードがあるので、ユーザーはそこにパスワードを入力しますが、テーブルのハッシュ形式を取得する方法がわからない場合は、ハッシュ形式とユーザー名を比較してユーザーがサイトにログインできるようにします。 lp –

+0

グーグルが助けになりますが、ここには基本があります。パスワードが作成されると、Saltというランダムな文字列が生成されます。パスワードにSaltを追加して、安全なHashingアルゴリズム(SHA256など)に入力します。したがって、ユーザーのパスワードが「12345」で、塩として「8D3kc93」を生成する場合は、123458D3kc93をフィードに送りますハッシュアルゴリズムを使用して、その出力をデータベースの1つの列に格納し、Saltを別の列に格納します。後で、ユーザーがログインしたいとき両方のSQLカラムが取得されます。次に、塩を*彼らの推測に加えて、それをハッシュしてマッチをチェックします。 – Kevin

関連する問題