2014-02-26 3 views
1

나는 로그인을 위해 버튼 로그인을 클릭 한 다음 나타나는 div logdiv가 있습니다. div에 signin 버튼이라는 버튼이 있습니다. 페이지를 다시로드하기위한 로그인 버튼을 클릭하면 사라집니다. logdiv로그인 버튼을 클릭 한 후 내 logdiv이 사라지는 이유는 무엇입니까?

내 logdiv 부분

<div id="logdiv" runat="server"> 
     <p id="logidlabel">User ID</p> 
     <asp:TextBox runat="server" ID="logintext" CssClass="logusertext"></asp:TextBox> 
     <p id="logpasslabel">Password</p> 
     <asp:TextBox runat="server" ID="logpasstext" CssClass="logpasstext" TextMode="Password"></asp:TextBox> 
     <asp:Button runat="server" ID="signin" CssClass="signinbt" Text="Sign in" OnClick="signin_Click"/> 
     <asp:Label ID="errorsignin" runat="server" Visible="False" ></asp:Label> 
    </div> 

내 코드 숨김

protected void signin_Click(object sender, EventArgs e) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlConnection conn = new SqlConnection(connectionString); 
    conn.Open(); 

    SqlCommand comm = new SqlCommand("SELECT password from usertable where userid = " + "'" + logintext.Text.ToString() + "'", conn); 
    SqlDataReader reader = comm.ExecuteReader(); 

    reader.Read(); 

    try 
    { 
     string password = reader["password"].ToString(); 
     string pass2 =logpasstext.Text.ToString(); 

     if (password == pass2) 
      iframestyle.Attributes["src"] = "userpage.aspx"; 
     else 
     { 
      errorsignin.Visible = true; 
      errorsignin.Text = "INVALID LOGIN"; 
      logdiv.Attributes["display"] = "block"; 
     } 
     reader.Close(); 
     conn.Close(); 
    } 
    catch (Exception ex) 
    { 
     errorsignin.Visible=true; 
     errorsignin.Text = "INVALID LOGIN"; 
    } 

} 

... 사용자 ID 및 암호가 암호 및 사용자 ID가 일치 전까지 유지 할 matched..i하지 않는 여부를 내가 사라지고 싶지 않다. 암호와 사용자 ID가 일치하지 않을 때까지 logdiv ... 데이터베이스에서 암호와 사용자 ID를 얻고 있습니다. 페이지의 재로드를 만드는 데이터베이스 ???

+0

솔루션이 아니지만 왜 logpasstext.Text.ToString()입니까? 뭐야 그냥 logpasstext.Text – ZedBee

+0

실제로 내가 생각하는 건 상관 없어 .. 내가 이것을 생략하고 그것도 작동 –

+3

오, 소년! [SQL Injection] (http://www.troyhunt.com/2013/07/everything-you-wanted-to-know-about-sql.html), [일반 텍스트로 저장된 암호] (http : // www. codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right) ... 귀하의 사이트는 보안 침해가 발생하기를 기다리고 있습니다. –

답변

2

가장 심각한 오류 인 코드에서 SQL Injection vulnerability을 수정 해 보겠습니다. 이제는 행이 없다는 예외에 의존하는 대신 Read() 호출의 결과를 확인하고 using 블록에 일회용 객체를 래핑합니다.

protected void signin_Click(object sender, EventArgs e) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 

    using (SqlConnection conn = new SqlConnection(connectionString)) 
    using (SqlCommand comm = new SqlCommand("SELECT password FROM usertable WHERE userid = @username", conn)) 
    { 
     comm.Parameters.AddWithValue("@username", logintext.Text); 

     conn.Open(); 

     using (SqlDataReader reader = comm.ExecuteReader()) 
     { 
      if (reader.Read()) 
      { 
       string password = reader.GetString(0); 
       if (password == logpasstext.Text) 
       { 
        iframestyle.Attributes["src"] = "userpage.aspx"; 
       } 
       else 
       { 
        errorsignin.Visible = true; 
        errorsignin.Text = "INVALID LOGIN"; 
        logdiv.Attributes["style"] = "display:block;"; 
       } 
      } 
      else 
      { 
       errorsignin.Visible = true; 
       errorsignin.Text = "INVALID LOGIN"; 
       logdiv.Attributes["style"] = "display:block;"; 
      } 
     } 
    } 
} 

편집 :는 즉시 문제를 해결하려면, 사용자 정의 display 속성보다는 style 속성을 설정해야합니다.

이제 비밀번호 저장 전략을 재고해야합니다. 비밀 번호를 일반 텍스트로 저장하는 것은 대단히 나쁜 생각입니다. 대신 소금에 절인 해시를 보관해야합니다. 더 자세한 정보는 this article을보십시오.

마지막으로 Forms Authentication으로 그립을 잡을 필요가있는 것 같습니다. 현재 구현으로 인증되지 않은 사용자가 먼저 로그인 할 필요없이 userpage.aspx을 요청할 수 있습니다.

+0

나는이 코드를 적용했지만 내 코드처럼이 텍스트는 잘못된 로그인을 의미하지만 logdiv는 사라지고 있습니다 .. 왜 그런지 모르시겠습니까 ?? –

+0

@setu :'display'라는 속성에'block' 값을 추가했기 때문에'div'가 사라졌습니다. 대신'display : block;'의 값으로'style' 속성을 설정해야합니다. 내 대답을 업데이트했습니다. –

+0

덕분에 많이 ... 나를 위해 일한 ... :) –

관련 문제