gpt4 book ai didi

java - Spring 安全 : how to implement Brute Force Detection (BFD)?

转载 作者:IT老高 更新时间:2023-10-28 13:50:02 25 4
gpt4 key购买 nike

我的 Web 应用程序安全性由 Spring Security 3.02 处理,但我找不到任何对暴力检测的现成支持。

我想实现一些应用级 BFD 保护。例如,通过在数据库 (JPA) 中存储每个用户的失败登录尝试。然后,受攻击的用户帐户可能会获得锁定期或通过电子邮件强制重新激活帐户。

使用 Spring Security 实现这一点的最佳方法是什么?是否有任何机构有这方面的示例代码或最佳实践?

最佳答案

推出自己的 BFD 并不难。与 Spring Security 3.0 一样,您可以简单地添加应用程序监听器(感谢 Stephen C 为我指明了正确的方向)。

当出现认证失败时会调用这个监听器:

@Component
public class AuthenticationFailureListener
implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> {

@Autowired
private UserDao userDao;

public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent ev) {

String username = ev.getAuthentication().getName();

User user = userDao.find("name", username);
if (user != null) { // only for existing users
user.reportLoginFailure();
userDao.commit();
}
}
}

现在每次验证失败都会通知用户。例如,用户增加一个身份验证失败计数器并在达到某个阈值时自行停用它。

当用户被正确认证时,下面的监听器会通知用户(例如,谁可以重置它的认证失败计数器):

@Component
public class AuthenticationSuccessEventListener
implements ApplicationListener<AuthenticationSuccessEvent>{

@Autowired
private UserDao userDao;

public void onApplicationEvent(AuthenticationSuccessEvent event) {

String username = event.getAuthentication().getName();

User user = userDao.find("name", username);
user.reportLoginOK();
userDao.commit();
}
}

上述监听器不需要额外的 XML 配置,由 Spring 自动拾取(如果它们在 Spring 组件扫描包中)。

根据您的事务配置,如果它们几乎同时发生,此解决方案可能会错过一些失败的登录计数。如果您使用单个 UPDATE 查询而不是加载用户然后保存更改来更新计数器,则可以防止这种情况发生。

上述监听器还可以扩展以检测其他 BDF 模式,例如对大量(随机)用户名进行扫描的单个 IP。

关于java - Spring 安全 : how to implement Brute Force Detection (BFD)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681401/

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