gpt4 book ai didi

spring-security - BadCredentialsException 预期,但得到 AccountExpiredException

转载 作者:行者123 更新时间:2023-12-03 23:39:10 24 4
gpt4 key购买 nike

我正在使用 Spring Security 来支持我的应用程序中的身份验证和授权。我自定义了安全上下文的几个方面,但我认为这不会影响我的问题。

我目前正在使用 Spring 3.1.2.RELEASESpring Security 3.1.3.RELEASE,但我即将更新到最新版本。

我认为我刚刚发现的 AbstractUserDetailsAuthenticationProvider$DefaultPreAuthenticationChecks() 内部类存在错误,如下所述:

如果我尝试使用一个用户和一个错误的(不正确的)密码登录,但是在我的用户存储库中找到了这个用户,并且他们被锁定、禁用或帐户已过期,那么 Spring Security 会响应 LockedExceptionDisabledExceptionAccountExpiredException

然而,从这个响应中,我刚刚确定该用户存在于存储库中,即使我只是猜到了密码,但还不知道它是对还是错!相反,Spring Security 应该主要使用 BadCredentialsException 进行响应,并且仅当凭据经过身份验证时才使用锁定、禁用或帐户过期的异常进行响应。

有没有其他人看到/报告过这种行为?我已经搜索过了,但在任何地方都看不到这个!

谢谢罗布

编辑

我刚刚升级到 Spring 3.2.1.RELEASESpring Security 3.2.0.M1 并且这种行为仍然保持不变。

最佳答案

只有在异常消息进入 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为空。如果我没记错的话,这甚至不可能通过纯粹使用命名空间配置来实现(如果没有明确设置,则有一个默认值)。

关于spring-security - BadCredentialsException 预期,但得到 AccountExpiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com