-1

私は ASP.NET メンバーシップを使用しています。これは、この種の認証を行う典型的な Web サイトではないためです。管理者がUnameとパスワード(暗号化)で割り当てるテーブルがあります。

ログインボタンをクリックすると、ログインページが表示されます。DBテーブルでユーザーを検索する必要があります。

public void getuserinfo()
{
    String var = System.Configuration.ConfigurationManager
        .ConnectionStrings["KKSTechConnectionString"].ConnectionString;

    SqlConnection conn = new SqlConnection(var);
    SqlCommand myCmd = new SqlCommand("SELECT Username, Pass FROM Users", conn);
    conn.Open();

    if(TextBox1== Username) && (TextBox2== Password) <- I am not able to get this right :( 
    {
        //How do I get his info?? 
    }
} 

*Database table for dbo.users:*

Uname(PK) | Pass | EmpID (FK)

最初にパスワードを復号化し、それを TextBoxPassword と比較したい..

助けてください。

4

2 に答える 2

2

もう 1 つの方法は、ユーザー画面で入力されたパスワードをハッシュし、それをデータベースに保存されているハッシュ化されたパスワードと比較することです。

さて、このように関数を使用してください。

public void ValidateUser()
{
    var connectionString = System.Configuration.ConfigurationManager
        .ConnectionStrings["KKSTechConnectionString"].ConnectionString;
    var userName = txtUserName.Text;
    var hashedPassword = Helper.ComputeHash(txtPassword.Text, "SHA512", null);
    // this query should be parameterised when used in production to avoid SQL injection attacks
    var query = String.Format("SELECT Username, Pass FROM Users WHERE Username='{0}' AND Pass='{1}'",
                    userName,
                    hashedPassword);

    using(var connection = new SqlConnection( connectionString ))
    using(var command = new SqlCommand(query, connection ))
    {
        conn.Open();
        SqlDataReader reader=command.ExecuteReader();
        if(reader.Read())
        {

        }
        reader.Close();
    }
}
于 2012-08-17T04:51:42.180 に答える
0

解決策にたどり着く前のいくつかの質問:

  1. クライアントからサーバー側にユーザ​​ー名とパスワードをどのように送信していますか? プレーンテキストですか?
  2. 暗号化はどこで行われますか?
  3. 暗号化コードを作成したか、利用可能な標準のいずれかを使用しましたか?

あなたのコードでは、次の問題に気付くことができます。

  1. データベースでクエリを実行したことがないにもかかわらず、接続オブジェクトとコマンド オブジェクトを作成しました。
  2. 使用しているクエリは、ユーザー テーブル全体を返しますが、これは絶対に必要ではありません。ユーザー名とパスワードのユーザー入力は既にあるので、それらが正しいかどうかを確認してください。
  3. クエリをパラメータ化して、入力をデータベースに送信します。そこで、ユーザー名とパスワードが一致するかどうかを確認します。その場合は、ユーザーの詳細 (アプリケーションのどこかで必要になると思います) を送り返すか、例外をスローするか、null を返します。

ユーザー名とパスワードを照合する前に、必ず暗号化/復号化に注意してください。

于 2012-08-17T04:41:40.357 に答える