資安JAVA(十七): 硬性 SESSION 逾時機制

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 17 – SET A HARD SESSION TIMEOUT
作者:John Melton
內文:
Bank website: Warning ! Push F5 before expired.
What is it and why should I care?

對於應用程式來說,Session 逾時機制是很重要的安全控制措施。這機制主要是在使用者登入一段時間後,強制使用者重新進行身分鑑別。逾時機制分為兩種:軟性和硬性。

硬性 Session 機制限制使用者登入一段時間後,必定要重新登入。以下是個範例,假設我們有個應用程式是:
  1. 需要經過身分鑑別才能使用應用程式
  2. 嘗試瀏覽應用程式時會轉向到登入頁面
  3. 使用者登入後,無論動作中或停止,只要超過 9 小時就必須登出,因此你的硬性 Session 逾時機制上限為 9 小時。
最終效果是,當使用者回到桌面重新點選應用程式後,將會被轉向到登入頁面。

上一段主要是講解硬性機制如何使用,但是硬性機制能避免甚麼弱點?雖然軟性機制能避免 CSRF 和類似的攻擊,硬性逾時機制則是避免攻擊者能永久持有受害者的帳戶,因為他們勢必要重新鑑別身分。為了避免這樣的事情發生,當使用者修改密碼時也應該要重新鑑別身分。


What should I do about it?

許多沒有軟性逾時機制的應用程式仍有硬性逾時機制。不幸的是對於 Java 開發人員,並沒有選擇餘地。這表示你必須自己寫一個或別人寫好的來用。
Java 中的硬性 Session 逾時機制可以有以下幾種方案:

方案一:設定逾時機制在程式碼中

Java API 並不支援,然而你可以輕鬆的建立一個 filter 來完成任務。簡單的說,你要將所有使用者的上次登入時間和合法的 Session id 存在清單中,如果某個Session id 的使用者送出 request 到 Server,就先檢查登入時間是否大於 X 分鐘(硬性逾時上限)。如果超過,取消 Session 的合法性,強制轉向登入頁面。很容易懂的概念。

方案二:利用第三方套件

雖然作者無法舉出任何第三方套件支援以上功能,理論是應該是有的。作者鼓勵大家寫出來後記得分享給整個社群。

方案三:設定逾時機制在單點登入系統(SSO)

這不是 Java 獨有的方案,但還是可以介紹一下。許多企業使用單點登入身分系統,以管理所有的應用程式。而他們正好提供 Session 逾時機制功能,包括軟性和硬性。

硬性逾時是很有用的安全控制機制,能讓你替應用程式增加額外一層的保護。

參考資料
http://www.jtmelton.com/2012/04/17/year-of-security-for-java-week-16-set-a-soft-session-timeout/

———–———–
資安Java: 上一篇 || 下一篇
———–———–


留言

這個網誌中的熱門文章

資安JAVA(八):HTTP強制傳輸安全(HSTS)

以 SharpPcap 實作可收聽封包的 C# 程式

資安JAVA(四):Session Cookie HTTPOnly Flag