public class SessionFixationProtectionStrategy
extends java.lang.ObjectHttpServletRequest.invalidate() を使用して、セッション固定攻撃から保護します。 すでにセッションを持っている場合(セッション固定保護攻撃に対する防御として)、新しく認証されたユーザーの新しいセッションを作成し、セッション属性を新しいセッションにコピーします。属性のコピーを無効にするには、migrateSessionAttributes を false に設定します(この場合でも、内部 Spring Security 属性は新しいセッションに移行されます)。
このアプローチは、セッションが無効になったときにサーブレットコンテナーが常に新しいセッション ID を割り当て、HttpServletRequest.getSession() を呼び出して新しいセッションを作成した場合にのみ有効です。
HttpSessionBindingListener の課題 オブジェクトのいずれかがオブジェクトのライフサイクルに関する仮定を行う方法で HttpSessionBindingListener インターフェースを実装する場合、新しく作成されたセッションへの既存の属性の移行は問題を引き起こす可能性があります。例として、Spring セッションスコープ Bean の使用があります。Bean がセッションから最初に削除されると、Bean が不要になったという前提で、DisposableBean インターフェースが呼び出されます。
アプリケーションの設計時にこの点を考慮し、属性が削除されてセッションに戻されたときに正しく機能しない可能性がある属性を保存しないことをお勧めします。または、SessionAuthenticationStrategy をカスタマイズして、アプリケーション固有の方法で課題に対処する必要があります。
| 修飾子と型 | クラスと説明 |
|---|---|
protected static class | org.springframework.security.web.authentication.session.AbstractSessionFixationProtectionStrategy.NullEventPublisher |
| 修飾子と型 | フィールドと説明 |
|---|---|
protected org.apache.commons.logging.Log | logger |
| コンストラクターと説明 |
|---|
SessionFixationProtectionStrategy() |
| 修飾子と型 | メソッドと説明 |
|---|---|
protected java.util.Map<java.lang.String,java.lang.Object> | extractAttributes(javax.servlet.http.HttpSession session) 無効にする前に、セッションから既存の属性を抽出するために呼び出されます。 |
void | onAuthentication(Authentication authentication, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) ユーザーが新しく認証されたときに呼び出されます。 |
protected void | onSessionChange(java.lang.String originalSessionId, javax.servlet.http.HttpSession newSession, Authentication auth) セッションが変更され、古い属性が新しいセッションに移行されたときに呼び出されます。 |
void | setAlwaysCreateSession(boolean alwaysCreateSession) |
void | setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher)SessionFixationProtectionEvent の送信に使用する ApplicationEventPublisher を設定します。 |
void | setMigrateSessionAttributes(boolean migrateSessionAttributes) 属性を新しいセッションに移行するかどうかを定義します。 |
protected java.util.Map<java.lang.String,java.lang.Object> extractAttributes(javax.servlet.http.HttpSession session)
migrateAttributes が false に設定されている場合、Spring Security 属性のみが保持されます。すべてのアプリケーション属性が破棄されます。このメソッドをオーバーライドして、新しいセッションに転送されるものを正確に制御できます。
session - 属性の抽出元のセッション public void setMigrateSessionAttributes(boolean migrateSessionAttributes)
extractAttributes メソッドをオーバーライドする場合は効果がありません。 この値を false に設定しても、Spring Security で使用される属性(たとえば、キャッシュされたリクエストを保存するため)は、デフォルトで保持されます。
migrateSessionAttributes - セッションの属性を新しい認証済みセッションに転送する必要があるかどうか。public void onAuthentication(Authentication authentication, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
セッションがすでに存在し、クライアントからのセッション ID と一致する場合、新しいセッションが作成され、セッション属性がそこにコピーされます(migrateSessionAttributes が設定されている場合)。クライアントのリクエストされたセッション ID が無効な場合、現在のセッションと一致しない場合はセッション ID を変更する必要がないため、何も実行されません。
セッションがない場合、alwaysCreateSession プロパティが設定されていない限り、アクションは実行されません。その場合、セッションが存在しない場合はセッションが作成されます。
SessionAuthenticationStrategy 内の onAuthentication protected void onSessionChange(java.lang.String originalSessionId,
javax.servlet.http.HttpSession newSession,
Authentication auth) このメソッドのデフォルト実装は、セッション ID が変更されたことをアプリケーションに通知するために SessionFixationProtectionEvent を公開します。このメソッドをオーバーライドしても、これらのイベントを公開したい場合は、オーバーライドメソッド内で super.onSessionChange() を呼び出す必要があります。
originalSessionId - 元のセッション識別子 newSession - 新しく作成されたセッション auth - 新しく認証されたプリンシパルのトークン public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher applicationEventPublisher)
SessionFixationProtectionEvent の送信に使用する ApplicationEventPublisher を設定します。デフォルトでは、SessionFixationProtectionEvent は送信されません。org.springframework.context.ApplicationEventPublisherAware 内の setApplicationEventPublisher applicationEventPublisher - ApplicationEventPublishernull にはできません。public void setAlwaysCreateSession(boolean alwaysCreateSession)