2011-12-15 14 views
0

私はしばらくの間グーグルで行っていますが、私はまだ私の質問への答えを見つけることができません。 です:方法があるかどうか、データベースの価値を比較し、それを比較する...私はそれを説明する方法が本当にわからない... so私はあなたが私のコードのためにこれまでに得たものをあなたに示すだろうと思う。 BTW Imはこのプログラムを作成するためにnetbeanを使い、ODBCデータベース(mircosoftアクセス)を使っています。私もコードでtry catchを使用して、それを表示する方法をidk。ログイン - データベースとユーザー入力を比較する

以下のプログラムは本当に私がそれを望むように動作しません。私は問題を比較しているので、 ありがとうございます。

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

関連する問題