代码之家  ›  专栏  ›  技术社区  ›  Sam YC

如何防止HTTP会话洪水攻击

  •  10
  • Sam YC  · 技术社区  · 7 年前

    洪水袭击:

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

    所以我做到了:

    1) 在Spring security配置中:

    sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
    

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

    <%@page session="false"%>
    

    乍一看,这很好,但有一个场景我仍然创建了会话。

    假设在登录之前,我访问了一个只有经过身份验证后才能访问的url,Spring会将我重定向到登录页面。

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

    我的问题是:

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

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   vsoni    7 年前

    你的观点看起来是正确的,如果不加以处理,这可能是一个严重的问题。我发现在这个话题上已经有一个悬而未决的问题。但是有一种方法可以控制这种行为。

    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?