2011-12-15 2 views
0

나는 잠시 동안 인터넷 검색을하고 아직도 내 질문에 대한 답변을 찾을 수 없습니다. : 나는 방법이나 방법이 있는지 알고 싶습니다. 데이터베이스의 가치를 확인한 다음 비교해보십시오 ... 설명하는 방법을 잘 모르겠습니다. 내 코드에 대해 지금까지 무엇을 얻었는지 보여 드리겠습니다. BTW 임 netbean을 사용 하여이 프로그램과 메신저 ODBC 데이터베이스 (mircosoft 액세스)를 사용합니다. 또한 코드에 try catch를 사용하여 보여 주지만 어떻게 만드는지 ..로그인 - 데이터베이스와 사용자 입력 비교

아래의 프로그램은 내가 원하는 방식으로 작동하지 않습니다. 비교할 때 문제가 있기 때문에. 미리 감사드립니다.

if(request.getParameter("username")!=null && request.getParameter("username") !="" 
     && request.getParameter("password")!=null && request.getParameter("password")!=""){ 

    String user = request.getParameter("username").toString(); 
    String pass = request.getParameter("password").toString(); 

    String check = "SELECT AccountType FROM Testing WHERE Username='"+user+"' AND Password ='"+pass+"'"; 
    rs = stmt.executeQuery(check); 
    String info = rs.getString(check); // trying to get the AccountType and store it into a string 

    while(rs.next()){ 
     if(info != null && info !=""){ //checks to see if the account exist in the database     
      if(info.equals("Admin")){ //checks to see if AccountType is "Admin" 
        response.sendRedirect("AdminConsole.jsp"); 
      }else 
       response.sendRedirect("UserConsole.jsp"); 
     }else 
      response.sendRedirect("ErrorPage2.jsp"); 
    } 
}else 
    response.sendRedirect("ErrorPage.jsp"); 

connection.close(); 

}

+2

SQL 인젝션 취약점이 있습니다. – SLaks

+2

암호를 일반 텍스트로 저장하면 안됩니다. 위의 문제를 해결하기 위해 – SLaks

+0

; - 매개 변수가있는 쿼리를 사용하여 SQL 삽입 방지 - 비교할 암호의 해시 (예 : MD5)를 저장합니다. 음수가 아니며이 코드는 매우 위험합니다. –

답변

0

,이 작업을 수행하지 마십시오하시기 바랍니다. 코드 내에서 SQL을 실행하면 안되며 일반 텍스트로 암호를 저장해야합니다. 사용자 이름/암호를 인수로 취한 다음 매개 변수가있는 프로 시저를 호출 한 다음 역할 (또는 원하는 다른 것)을 반환해야합니다. 암호는 최소한 해시되어야합니다. 이 같은

뭔가 : http://msdn.microsoft.com/en-us/library/aa140021(v=office.10).aspx

관련 부품 :

PROC :


create procedure ValidateUserLogin 
    @UserName varchar(30) 
    , @Password varchar(30) 
as 
begin 
    if exists (select * from UsersTable as ut 
    where ut.UserName = @UserName AND ut.Password = @Password) 
    select 1; 
    else 
    select 0; 
end 

클래스 저장 프로 시저가 저장된 쿼리라고 MS Access에서 http://www.daniweb.com/software-development/csharp/threads/87556


private bool IsValidatedUser(string username, string password) { 
    try { 
    bool rv = false; 

    using (SqlConnection con = new SqlConnection(connectionString)) { 
     using (SqlCommand cmd = new SqlCommand()) { 
     con.Open(); 

     cmd.Connection = con; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandText = "ValidateUserLogin"; 

     cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 30).Value = username; 
     cmd.Parameters.Add("@Password", SqlDbType.VarChar, 30).Value = password; 

     rv = Convert.ToBoolean(cmd.ExecuteScalar()); 

     con.Close(); 
     } 
    } 

    return rv; 
    } 
catch (Exception ex) { 
    // Log errors 
    throw; 
    } 
} 
+0

이런 방법을 사용해보십시오. 나는이 물건에 아직도 새롭다. 그래서 병 들고 착수하자. 모든 답장을 보내 주셔서 감사합니다. – user1100562

관련 문제