説明
ServletセッションのsetMaxInactiveIntervalを0または負の値にすると、非アクティブ状態による失効が無効になります。ログインセッションが長く残ると、盗まれたセッションIDを使い続けられたり、共有端末や放置されたブラウザーからアカウントへアクセスされたりするおそれがあります。
想定される影響
- 盗まれたセッションIDの長期利用
- 共有端末でログアウトしていないアカウントへの継続的なアクセス
- 別途再認証を求めない場合、既存セッションで機密性の高い機能へアクセスし続けられる可能性
対処方法
- 要件に合う正の非アクティブ時間を秒単位で設定してください。
- リスクの高い機能には短いタイムアウトと再認証を適用してください。
- ログアウト時にはセッションを無効化し、セッションCookieも失効させてください。
例
作成済みのHttpSessionに非アクティブ時間を設定するメソッドの抜粋です。セッション全体の有効期間や重要な操作の再認証は、別のポリシーで適用してください。
変更前
java
void login(HttpSession session) {
session.setMaxInactiveInterval(-30);
}
変更後
java
void login(HttpSession session) {
session.setMaxInactiveInterval(900);
}
説明:
- 変更前: 0以下の値では、セッションが使われていなくても失効しません。
- 変更後: 非アクティブ時間を900秒(15分)に設定します。要求が続くとセッションは有効なままなので、この設定だけでは全体の有効期間を制限できません。