3

アプリケーションでの認証と承認をサポートするために Spring Security を使用しています。セキュリティコンテキストのいくつかの側面をカスタマイズしましたが、これが私の質問/問題に関与しているとは思いません.

現在、Spring 3.1.2.RELEASESpring Security 3.1.3.RELEASEを使用していますが、最新バージョンに更新しようとしています。

AbstractUserDetailsAuthenticationProvider$DefaultPreAuthenticationChecks()以下に説明する、今見つけた内部クラスにバグがあると思います。

ユーザーと不適切な (間違った) パスワードでログインしようとしたが、このユーザーがユーザー リポジトリで見つかり、それらがロックされているか、無効になっているか、アカウントの有効期限が切れている場合、Spring Security はLockedExceptionDisabledException、またはで応答しAccountExpiredExceptionます。

ただし、この応答から、ユーザーがリポジトリに存在すると判断しただけで、パスワードを推測しただけで、それが正しいか間違っているかはまだわかりません! むしろ、Spring Security は主に で応答する必要がBadCredentialsExceptionあり、資格情報が認証されている場合にのみ、ロックされた、無効化された、またはアカウントの期限切れの例外で応答します。

他の誰かがこの動作を見たり報告したりしましたか? 探したけどどこにもない!

ありがとうロブ

編集

Spring 3.2.1.RELEASESpring Security 3.2.0.M1にアップグレードしたばかりですが、この動作は変わりません。

4

1 に答える 1

1

これは、例外のメッセージが HTTP 応答に含まれる場合にのみ問題になります。コードを調べると、デフォルトの名前空間構成 ( ) を使用する場合はそうではないことがわかります。これは、攻撃者が応答として取得するのは、サーバー側でスローされた<security:form-login>ものに関係なく、ログイン ページへの HTTP リダイレクトだけであるためです。AuthenticationException

ただし、コードを読むと、AuthenticationFailureHandlerこの情報が公開されるように を構成できることがわかります。
からのスニペットSimpleUrlAuthenticationFailureHandler.onAuthenticationFailure():

    if (defaultFailureUrl == null) {
        logger.debug("No failure URL set, sending 401 Unauthorized error");

        response.sendError(HttpServletResponse.SC_UNAUTHORIZED,
           "Authentication Failed: " + exception.getMessage());
    }

この問題を意味しているのであれば、その通りだと思います。なぜなら、例外メッセージを送り返すことは、クライアント側が認識すべき以上のものであることは間違いないからです。開発者は、この安全でない動作を実現するためにいくらか努力する必要がありますが、これはdefaultFailureUrlを null に設定しています。私が間違っていなければ、名前空間構成を純粋に使用しても、これは不可能です (明示的に設定されていない場合はデフォルトがあります)。

于 2013-02-18T11:27:23.847 に答える