資安JAVA(十六): 軟性 SESSION 逾時機制

來源:John Melton's Weblog
標題:YEAR OF SECURITY FOR JAVA – WEEK 16 – SET A SOFT SESSION TIMEOUT
作者:John Melton
內文:
What is it and why should I care?

對於任何應用程式 ,Session 的定期逾時都是重要的安全控制機制。此機制定義一段時間內使用者都能以登入的身分使用應用程式,直到時間截止則需要重新進行身分鑑別(再次登入)。逾時機制分為兩種:軟性逾時和硬性逾時。今日作者將為你介紹軟性逾時。下周會介紹硬性逾時。

軟性逾時應用在,當使用者停止互動、閒置超過一段時間。

以下舉例,假設我們的應用程式是:
  1. 需要經過身分鑑別才能使用應用程式
  2. 嘗試瀏覽應用程式時會轉向到登入頁面
  3. 使用者登入後,突然有事離開20分鐘,而你只有15分鐘的逾時
綜合以上,當使用者回到桌面重新點選應用程式後,將會被轉向到登入頁面。

這樣的情境表達了軟性逾時如何運作,但究竟這樣的機制是在保護什麼?有關的問題很多,包括身分鑑別、授權、稽核、Session Hijacking,但最主要還是針對 CSRF。一段合理的時間後的自動登出相當程度的降低 CSRF 類別的攻擊。更精確的說,任何想要利用使用者已登入的合法性進行攻擊,利用這樣簡單的機制都能有效的阻止,至少能提高複雜度。


What should I do about it?

就像其他的安全控制機制,總有失有得,為了Session逾時機制必然會犧牲功能性。許多熱門的WEB應用程式都沒有軟性Session逾時機制,因為他們不想因為不斷地再次登入造成使用者困擾。另一方面,這是種較大風險的決定,為了更方便和更簡單而讓你的使用者暴露在較不安全的環境。假使你的應用程式保護著敏感資料、或你的使用者無法承擔太高的風險,你應該考慮一下軟性Session逾時的機制。

Java的環境中你有幾種方式可以實作:

方案一:設定逾時在 web.xml

目前為止最普遍的方法,不需要修改你的程式碼,就可以進行調整。以下是設定逾時為15分鐘的範例。

<session-config>
   <session-timeout>15</session-timeout> <!-- set in minutes -->
</session-config>


方案二:設定逾時在 Server 

通常 Server 預設是30分鐘後逾時,或你也可以在Container設定不同的時間。

方案三:設定逾時在程式碼中

在程式碼中實作的好處是,可以依照不同使用者、不同情況設定逾時,最大彈性的方式。但比起方案一,此方案較不普遍。

httpSession.setMaxInactiveInterval(15*60); // set in seconds


方案四:設定逾時在 SSO 系統 (Single Sign On)

這不是Java獨有的方案,但也應該提出來供大家參考。許多企業利用單點登陸識別系統來控制應用程式。而剛好些系統都能讓你設定Session逾時時間。

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

參考資料
http://likewaylai.blogspot.com/search/label/CSRF
http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-

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

留言

這個網誌中的熱門文章

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

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

資安JAVA(四):Session Cookie HTTPOnly Flag