Grails Spring Security如何抵御暴力?

Grails Spring Security如何抵御暴力?,grails,spring-security,Grails,Spring Security,我在Grails应用程序中使用Spring安全插件进行身份验证和授权。用户可以尝试无数次输入密码。是否有针对暴力攻击应用某种防御的配置设置。例如,尝试10次后,是否不允许用户尝试登录 简单的回答是,Spring Security没有提供任何实现来防止针对帐户的暴力企图 但是,它确实为您提供了实施自己的策略以防范它们的方法。通常,您需要对失败的身份验证事件实现回调。您在这里做什么取决于您的应用程序的适当操作过程。一些应用程序将简单地增加失败尝试的会话变量,一旦达到该阈值,只需忽略任何进一步的尝试

我在Grails应用程序中使用Spring安全插件进行身份验证和授权。用户可以尝试无数次输入密码。是否有针对暴力攻击应用某种防御的配置设置。例如,尝试10次后,是否不允许用户尝试登录

简单的回答是,Spring Security没有提供任何实现来防止针对帐户的暴力企图

但是,它确实为您提供了实施自己的策略以防范它们的方法。通常,您需要对失败的身份验证事件实现回调。您在这里做什么取决于您的应用程序的适当操作过程。一些应用程序将简单地增加失败尝试的会话变量,一旦达到该阈值,只需忽略任何进一步的尝试

其他应用程序可能需要将此信息与上次失败的尝试一起保留,并通过在一段时间内特定次数的失败尝试后更新域实例来锁定帐户

在解释如何做到这一点方面做得很好,但通常您希望将spring security核心插件的事件侦听器添加到
Config.groovy
中,如下所示:

grails.plugin.springsecurity.useSecurityEventListener = true
grails.plugin.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
    // Handle successful login
}
grails.plugin.springsecurity.onAbstractAuthenticationFailureEvent = { e, appCtx ->
    // Handle failed login
    // example of how to obtain the session if you need it
    def request = grails.plugin.springsecurity.web.SecurityRequestHolder.getRequest()
    def session = request.getSession(false)
}

您当然可以通过收听另一个使用
bcrypt
和类似算法的快速胜利来定制它。您选择“cost”参数,这使得计算每个散列的速度变慢。因此,每个用户的登录速度都慢了一倍(不到一秒),但每个黑客的哈希计算也需要那么长的时间,这将显著影响他们的吞吐量。更新:忘了提一下,这是2.0中的默认设置,因此新应用程序会自动实现这一点。新应用程序可能还希望使用指数延迟,也就是说,不要只让它们进行3次、5次或10次快速尝试并锁定,而是在第一次尝试后添加一个小延迟,使每一次都比前一次慢。对于输入错误的用户来说,这很烦人,但是对于自动攻击来说,这是一个很大的减速。一旦实现了,请在pull请求中发送更改,我将添加它作为可选功能:)@BurtBeckwith我有一些为Spring Security编写的相当健壮的密码策略和登录策略扩展。你真的想看看他们,并考虑他们加入到核心插件?我必须把它们清理一下,然后发布到GitHub上,但是它们工作得非常好(满足我们的需要)。当然,如果你认为其他人可能会使用它们的话。好的,我会在这个周末花一些时间把它们发布到GitHub上。