2012-04-30 4 views
0

Visual Studio 2010에서 웹 응용 프로그램을 개발했으며이 응용 프로그램에 사용자 로그인 시스템을 추가하려고 시도 중입니다. 지금까지 나는 사용자 이름과 관련된 암호가 일치하더라도 모든 암호가 올바르지 않다고 알려주기 때문에 사용자 암호를 확인하는 데 문제가 있습니다. 이것은 내가 아들까지 작성한 코드입니다 :에 관계없이 프로그램을 입력 무슨 암호사용자 로그인 시스템에서 암호와 관련된 문제. 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

당신이 지금까지 가지고있는 것은 매우 불안정합니다. 구글 "SQL 인젝션 공격"이 무슨 뜻인지 알기. – ken

답변

1

..

편집을하기로되어 있는지에 대한 너무 복잡한 것 같다 : 사용자가 댓글을 달았 후 나는 내 대답을 편집 해 :

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의 이름이 현재 컨텍스트에 없습니다.' –

관련 문제