2012-04-30 3 views
0

私はVisual Studio 2010でWebアプリケーションを開発し、このアプリケーションにユーザーログインシステムを追加しようとしています。これまでは、ユーザー名に関連付けられているパスワードと一致していても、すべてのパスワードが間違っているとプログラムから通知されているため、ユーザーのパスワードの検証に問題があります。問題がある場合の最初の部分であることを示しているユーザログインシステムでパスワードを発行します。 C#

protected void n_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     con.Open(); 
     string cmdStr = "select count(*) from Registration where UserName='" + TextBoxUserName.Text + "'"; 
     SqlCommand CheckUser = new SqlCommand(cmdStr, con); 
     int Temp = Convert.ToInt32(CheckUser.ExecuteScalar().ToString()); 
     if (Temp == 1) 
     { 
      string cmdStr2 = "Select Password from Registration where UserName ='" + TextBoxUserName.Text + "'"; 
      SqlCommand pass = new SqlCommand(cmdStr2, con); 
      string password = pass.ExecuteScalar().ToString(); 
      con.Close(); 

      if (password == TextBoxPassword.Text) 
      { 
       Session["New"] = TextBoxUserName.Text; 
       Response.Redirect("HomePage.aspx"); 
      } 
      else 
      { 
       Label1.Visible = true; 
       Label1.Text = "Password is invalid"; 
      } 
     } 
     else 
     { 
      Label1.Visible = true; 
      Label1.Text = "Username is invalid"; 
     } 


    } 
} 

}

は関係なく、どのようなパスワードの入力されたプログラムを出力するであろう「パスワードが無効です」:これは私がこれまで息子を書いたコードですステートメント?またはそれが使用する変数? 無効なユーザー名が同じようにフラグを立てても、うまく動作することに言及する価値があります。

ありがとうございます。

+11

SQLインジェクションをチェックしてください。 – empi

+4

あなたのパスワードは、データベースで塩漬けされ、ハッシュされる必要があります。パスワードをプレーンテキストに保存しないでください。 – zimdanen

+4

あなたはこれまでのところ、信じられないほど安全ではないように見えます。 Googleの "SQLインジェクション攻撃"は、私が何を意味するかを確認する。 – ken

答えて

1

は、...

編集を行うことになっているもののためにあまりにも複雑なようだ:ユーザーがコメントした後、私は私の答えをeditted:

public bool Login(String uName, String pasw) 
{ 
    using (SqlConnection myConnection = new SqlConnection(connString)) 
    { 
     string oString = "Select ID from yourTable where username = @username AND paswoord = @password"; 
     SqlCommand oCmd = new SqlCommand(oString, myConnection); 
     oCmd.Parameters.AddWithValue("@username", uName); 
     oCmd.Parameters.AddWithValue("@password", pasw); 
     string id = null; 
     myConnection.Open(); 
     using (SqlDataReader oReader = oCmd.ExecuteReader()) 
     {    
      while (oReader.Read()) 
      { 
       id = oReader["id"].ToString(); 
      } 
      myConnection.Close(); 
     } 
     if (id == null) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     }   
    } 
} 

あなたはこのような何かを試みることができます。また、それは何の関係もないかもしれませんが、属性 "password"に名前をつけたときにデータベースが気に入らない場合は、 "pw"または "pasw"などに変更できます。

+0

あなたのお返事ありがとうございます!全体的なコードがどのように見えるか、より具体的にすることができますか?// SQLのその他のものによって少し混乱しています。申し訳ありません、私のnoobishness! –

+1

私は私の答えを編集しました。このようにすれば、必要なパラメータを使ってメソッドのログインを呼び出すだけです。次のようにします:bool validInfo = login(TextBoxUserName.Text、TextBoxPassword.Text);あなたはwheterをチェックするか、validInfoが真であるかどうかをチェックすることができます。 – Thousand

+0

次の行にエラーがあります。using(SqlConnection myConnection = new SqlConnection(ConnString)) 'ConnStringという名前は現在のコンテキストに存在しません。' –

関連する問題