2017-03-05 96 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。