セッションIDのふりなおし(Java, J2EE, resin)
目的
ユーザーのログイン前後で同じセッションIDが使われているのを、ログインのタイミングで新しいセッションIDを使うようにする。セッション・ハイジャック対策。
セッション・ハイジャックについて
セッションを用いたログイン管理を行なっているアプリケーションにおいて、攻撃者が用意したセッションIDをリクエストに含まされた正規の利用者が、正規の手順でログインすることで、不正なセッションIDを用いたログイン認証が行われてしまう。
環境
言語:java(J2EE)
サーバー:resin(http://www.caucho.com/)
結論
${RESIN_HOME}/conf/resin.confのsession-configに、
<reuse-session-id>false</reuse-session-id>
を追加。
流れ
某ECサイトで、ログイン前後で(というか、cookieの期限がすぎるまで)、同一のセッションIDがずっと使いまわされていることが判明。
↓
ソースチェック。ログイン処理の際に、セッション無効化処理がコーディングされていることを確認。ということは、アプリケーションじゃなくて環境の問題?
request.getSession().invalidate();
↓
ローカルでデバッグしてみたら、セッションIDがふりかわっていることを確認。
↓
少し考えた末に、ローカルはTomcat, サーバではResinを使用していることを思い出す。
↓
ドキュメントチェック
↓
発見(http://www.caucho.com/resin-3.0/config/webapp.xtp#session-config)
↓
設定追加
<reuse-session-id>false</reuse-session-id>
↓
完成!
というわけで、
・サーバ上だとデバッグしにくい。
J2EE
メモ
メモ – J2EEのトランザクション
JTA/JTS
JTA:http://java.sun.com/j2ee/ja/jta/index.html
JTShttp://java.sun.com/j2ee/ja/jts/index.html
これを利用することで、複雑なトランザクション制御を実装することが可能となる。
※ただし、仕様も複雑。
EJBのトランザクション
これを利用することで、JTA/JTSを用いた複雑な実装を行ことなく、手軽にトランザクション管理を実現することが出来る。
- Required
- RequiresNew
- Mandatory
- NotSupported
- Supports
- Never
Required
Beanがトランザクションの下にあるクライアントから呼び出された場合、そのトランザクションの一部として処理を行う。
Beanを呼び出したクライアントがトランザクションの下にない場合、新しいトランザクションを開始して処理を行う。
RequiresNew
Beanがトランザクションの下にあるクライアントから呼び出された場合、そのトランザクションを停止後、新たなトランザクションを開始してから処理を行う。処理が終了したら、停止したトランザクションを再開する。
Beanを呼び出したクライアントがトランザクションの下にない場合、新しいトランザクションを開始して処理を行う。
Mandatory
Beanがトランザクションの下にあるクライアントから呼び出された場合、そのトランザクションの一部として処理を行う。
Beanを呼び出したクライアントがトランザクションの下にない場合、TransactionRequiredException をスローする
Supports
Beanがトランザクションの下にあるクライアントから呼び出された場合、そのトランザクションの一部として処理を行う。
Beanを呼び出したクライアントがトランザクションの下にない場合、何も行わない。
NotSupported
Beanがトランザクションの下にあるクライアントから呼び出された場合、そのトランザクションを停止後、トランザクション管理外で処理を行う。処理が終了したら、停止したトランザクションを再開する。
Beanを呼び出したクライアントがトランザクションの下にない場合、何も行わない。
Never
Beanがトランザクションの下にあるクライアントから呼び出された場合、RemoteExceptionをスローする。
Beanを呼び出したクライアントがトランザクションの下にない場合、何も行わない。
※EJBのメソッドはトランザクション管理上で実行されない。
Springのトランザクション
- PROPAGATION_REQUIRED
- PROPAGATION_SUPPORTS
- PROPAGATION_MANDATORY
- PROPAGATION_REQUIRES_NEW
- PROPAGATION_NOT_SUPPORTED
- PROPAGATION_NEVER

