web-dev-qa-db-ja.com

httpservletrequest-新しいセッションの作成/セッションIDの変更

Java Webアプリケーション。

ログインコードを調べると、HttpServletRequestのgetSession()メソッドを介してHttpServletRequestからHttpSessionを取得します。 (認証目的でセッション内のいくつかの値を使用します)

ただし、セッション固定攻撃が心配なので、最初のセッションを使用した後、新しいセッションを開始するか、セッションIDを変更します。これは可能ですか?

35
AJM

Servlet 3.0 APIでは、既存のセッションのセッションIDを変更することはできません。通常、セッションの固定から保護するには、新しいセッションを作成し、古いセッションも無効にします。

このようなセッションを無効にすることができます

_request.getSession(false).invalidate();
_

そして、新しいセッションを作成します

getSession(true)getSession()も機能するはずです)

明らかに、永続化するデータがセッションにある場合、最初のセッションから2番目のセッションにデータをコピーする必要があります。

セッション固定保護のために、認証要求でこれを行うだけでよいと一般に考えられていることに注意してください。しかし、より高いレベルのセキュリティには、古いセッションを投げて、すべてのリクエストに対して新しいセッションを作成することが含まれます。

41
pablochan

Java EE 7およびServlet API 3.1(Tomcat 8)なので、このような動作を実現するために HttpServletRequest.changeSessionId() を使用できます。リスナーHttpSessionIdListenerこれは、各変更後に呼び出されます。

27
Jakub Kubrynski