Jon*_*tts 6 java security spring spring-security
我最近在我雇主的一个基于 Spring 的 Java 应用程序中实施了一些安全改进,并且我已经覆盖了 Spring Security 的AbstractUserDetailsAuthenticationProvider类,以便对用户身份验证进行一些额外的处理。在此过程中,我意识到DefaultPreAuthenticationChecks内部类在身份验证提供程序通过additionalAuthenticationChecks验证密码的方法。如果用户被禁用、过期或锁定,则会抛出异常,从而在屏幕上显示相关消息。对我而言,在成功验证密码之前检查用户帐户并提供此帐户的详细信息是一种明显的安全风险,因为它可能会暴露用户帐户是否存在。有谁知道为什么 Spring Security 可能会这样做的一个很好的理由?显然,我可以DefaultPreAuthenticationChecks通过使用check不执行任何操作的方法创建自己的虚拟类来覆盖该类,但很遗憾必须首先完成此操作。
提前致谢。
PS 我在这里的相关注释上发现了一个问题,但似乎没有人问这个问题,为什么存在这个潜在的安全漏洞。
小智 1
我想我来晚了一点,但以防万一有人仍然想知道,社区之前实际上已经讨论过这个问题
\n\n引用自开发商
\n\n\n\n\n卢克·泰勒说:
\n\n情况并非如此。\xe2\x80\x99 取决于您在登录失败时向用户显示什么失败消息 \xe2\x80\x93 \xe2\x80\x99s 没有什么可以阻止您说\n \xe2\x80\x9clogin无论原因为何,均失败\xe2\x80\x9d。应用程序在固定次数的登录尝试后通知用户其帐户已被锁定的情况也很常见。所需的行为将取决于您如何解释不同的状态标志(框架并未严格定义)。这些异常还驱动 AuthenticationManager 生成事件,因此它们根本不需要供用户使用。例如,系统管理员可能希望在有人尝试使用锁定或禁用的帐户时得到通知,而不仅仅是在他们使用正确的密码时得到通知。
\n\n也有人认为,在帐户锁定状态之前检查密码并仅在给出正确的密码时显示 \xe2\x80\x9clocked\xe2\x80\x9d 消息也将允许暴力密码检查,即使\n 帐户被锁定后。
\n\n所以我不同意行为是 \xe2\x80\x9cin Correct\xe2\x80\x9d。我认为能够定制一些东西可能会很有用。也许我们应该有\n方法
\n\npreAuthenticationChecks(用户详细信息用户)
\n\npostAuthentication(用户详细信息用户)
\n\n当检查不同的标志时,可以覆盖它以进行更改。
\n
tl;dr:社区已经意识到这个问题,但他们不认为这是一个潜在的安全缺陷,相反,他们认为这取决于“如何解释不同的状态标志”,是的,它是使用setPostAuthenticationChecks(UserDetailsChecker postAuthenticationChecks) 和可以轻松更改默认行为setPreAuthenticationChecks(UserDetailsChecker preAuthenticationChecks)
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |