spring security防御會話偽造session攻擊


1. 攻擊場景

session fixation會話偽造攻擊是一個蠻婉轉的過程。

比如,當我要是使用session fixation攻擊你的時候,首先訪問這個網站,網站會創建一個會話,這時我可以把附有jsessionid的url發送給你。

http://unsafe/index.jsp;jsessionid=1pjztz08i2u4i
        

你使用這個網址訪問網站,結果你和我就會公用同一個jsessionid了,結果就是在服務器中,我們兩人使用的是同一個session。

這時我只要祈求你在session過期之前登陸系統,然后我就可以使用jsessionid直接進入你的后台了,然后可以使用你在系統中的授權做任何事情。

簡單來說,我創建了一個session,然后把jsessionid發給你,你傻乎乎的就使用我的session進行了登陸,結果等於幫我的session進行了授權操作,結果就是我可以使用一開始創建的session進入系統做任何事情了。

與會話偽造的詳細信息可以參考http://en.wikipedia.org/wiki/Session_fixation

2. 解決會話偽造

解決session fix的問題其實很簡單,只要在用戶登錄成功之后,銷毀用戶的當前session,並重新生成一個session就可以了。

Spring Security默認就會啟用session-fixation-protection,這會在登錄時銷毀用戶的當前session,然后為用戶創建一個新session,並將原有session中的所有屬性都復制到新session中。

如果希望禁用session-fixation-protection,可以在http中將session-fixation-protection設置為none。

<http auto-config='true'>
	<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
	<intercept-url pattern="/**" access="ROLE_USER" />
	<session-management session-fixation-protection="none"/>
</http>
        

session-fixation-protection的值共有三個可供選擇,none,migrateSession和newSession。默認使用的是migrationSession,如同我們上面所講的,它會將原有session中的屬性都復制到新session中。上面我們也見到了使用none來禁用session-fixation功能的場景,最后剩下的newSession會在用戶登錄時生成新session,但不會復制任何原有屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM