0

ユーザー名とパスワード (ログイン ページで入力したもの) が一致するかどうかを確認するにはどうすればよいですか? すべての情報は Derby DB に保管されます。指定されたユーザー名に対して正しいパスワードが入力されているかどうかを知る必要があるだけです。

これが私のコードです:

public void checkIdPw(String userName, String passWord) {
    try {
        stmt = conn.createStatement();
        String checkPwforIdSQL = "SELECT PASSWORD FROM " + studentsTable + " WHERE USERNAME = '" + userName + "'";
        stmt.executeQuery(checkPwforIdSQL);
        stmt.close();
    } catch(SQLException sqlExcept) {
        sqlExcept.printStackTrace();
    }
}
4

1 に答える 1

3

パスワードを暗号化せずに保存するのはセキュリティが低く、 Bcryptなどでパスワードを暗号化する方がはるかに優れています。

次のようなものは、必要なものに対して機能するはずです。a の使用PreparedStatementは非常に重要であり、SQL インジェクション攻撃を可能にするため、単純な文字列連結は決して実行しないでください。

PreparedStatement stmt = conn.prepareStatement(
        "SELECT USERNAME FROM studentsTable WHERE USERNAME = ? AND PASSWORD = ?");
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
    // valid credentials
} else {
    // invalid credentials
}

rs.close();
stmt.close();

サイトの性質によっては、ユーザー名 (または電子メール アドレス) またはパスワードが間違っていたかどうかに関係なく、失敗したユーザーに同じ一般的なメッセージを表示することをお勧めします。メッセージの例は、「ユーザー名またはパスワードが無効です」です。これの利点は、攻撃者がエラー メッセージからユーザー名が有効であることを判断できないため、ユーザー名の収集を防ぐのに役立つことです。一部のサイトでは、これは他のサイトよりも重要であり、ユーザー名が既に公開されているサイトでは、他の収集方法が利用できるほどのメリットはありません.

于 2013-04-17T03:52:57.893 に答える