2017-03-05 95 views
0

我们正试图在应用程序中防止会话固定攻击。这意味着我们预计每次用户登录应用程序时都会生成新的JSESSIONIDSpring安全性中的会话固定

当前场景不会生成新的JSESSIONID使用ADFS(Active Directory)进行后验证。因此我们希望达到同样的效果。你能告诉我们,如何解决这种攻击?

我们在我们的应用程序中使用了Spring,Primefaces和Spring Security。我们尝试在我们的Spring security.xml file中实施以下标签。但是,它似乎没有生成新的JSESSIONID后验证与ADFS成功。这个spring-security.xml已被添加到web.xml。你能让我们知道下面的使用有什么问题吗?我们在项目中使用Spring Security 3.2.10。

<sec:http create-session="always" use-expressions="true"> 
     <sec:intercept-url pattern="/*" /> 
     <sec:http-basic /> 
     <sec:session-management invalid-session-url="/" 
      session-fixation-protection="newSession"> 
      <sec:concurrency-control max-sessions="150" 
       expired-url="/" /> 
     </sec:session-management> 
     <sec:csrf/> 
    </sec:http> 
    <sec:authentication-manager alias="authenticationManager"> 
     <sec:authentication-provider> 
      <sec:user-service> 
       <sec:user name="abc" password="abc" authorities="ROLE_USER" /> 
      </sec:user-service> 
     </sec:authentication-provider> 
    </sec:authentication-manager> 
+0

你可以看到在任何浏览器中的cookies标签。此选项卡将显示其更改的值。 –

回答

0

如果您正在使用API​​的Basic认证,你最好不要创建新的会话

<sec:http create-session="stateless" .... 

如果要创建新的会话身份验证后,默认Basic过滤器不支持,但你可以实现自己的过滤器,就像AbstractAuthenticationProcessingFilter一样,其中有SessionAuthenticationStrategySessionFixationProtectionStrategy将在旧会话后验证中使用存在的属性创建一个新的会话。

+0

如何实现SessionAuthenticationStrategy?没有很清楚地得到你的解决方案。你能不能再重述一遍? –

0

我认为您使用表单登录是因为谈论用户登录.Spring包含开箱即用的会话固定保护。在SessionManagementFilter中,在doFilter方法中,您可以看到,如果用户已在当前请求中进行身份验证,则将调用会话身份验证策略。这个策略默认是SessionFixationProtectionStrategy。 显然你的配置是正确的,调试该方法并检查发生了什么。此外,如果可能的话,建议登录表单轻而易见,因此应优先使用默认的创建会话值“IfRequired”而不是“always”。无论如何,newSession策略应该使当前会话无效,然后停止一个新的并返回一个新的JSESSIONID cookie。