如何防止HTTP会话泛滥攻击

时间:2017-10-11 07:43:19

标签: spring security session cookies spring-security

洪水攻击: 简而言之,黑客可以不断访问服务器(没有cookie)来强制Java容器继续创建新会话。

我正在使用Spring Security来管理会话。我意识到jsessionid在登录前一直在创建,这不是我想要的。

所以我做了:

1)在Spring安全配置中:

sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)

2)在jsp中禁用会话创建。因为我使用的是apache tile,因为它使用的是动态include,所以我必须在所有jsp片段中禁用会话创建。这非常乏味。

<%@page session="false"%>

乍一看,这很好,但有一种情况我仍然会创建会话。

让我们说在登录之前,我访问了一个只有经过身份验证才能访问的网址,Spring会将我重定向到登录页面。

在重定向之前,响应已经指示设置一个新的cookie,即已创建的会话。

我的问题:

1)会话泛滥攻击是一个严重的问题吗?我应该真的照顾它吗?

2)有没有更好的方法来处理这个问题?任何最佳做法?

3)我的代码怎么了?它应该实际工作,我怀疑cookie是由Spring创建的,虽然我已经将它设置为SessionCreationPolicy.NEVER。我无法将其设置为Stateless,登录后仍需要会话。

我更关心会话攻击实际上与DDOS相比,我还在Spring中设置.maximumSessions(1)以防止多次登录。但上述问题在登录前发生。请帮忙。感谢。

1 个答案:

答案 0 :(得分:2)

您的观点看起来是有效的,如果不处理,它可能是一个严重的问题。我发现这个话题已经存在一个未解决的问题。但是有一种可以控制这种行为的工作。

public class ApiSecurityConfig extends WebSecurityConfigurerAdapter {
        public HttpSessionRequestCache getHttpSessionRequestCache() {
            HttpSessionRequestCache httpSessionRequestCache = new HttpSessionRequestCache();
            httpSessionRequestCache.setCreateSessionAllowed(false);
            return httpSessionRequestCache;
        }

        @Override
        protected void configure(final HttpSecurity http) throws Exception {
            http.requestCache().requestCache(getHttpSessionRequestCache());
}

有关详细信息,请参阅以下链接。

https://github.com/spring-projects/spring-security/issues/4242

How to stop Spring Security from creating a new session?