2011-10-19 12 views
0

JSFフレームワークを使用するWebアプリケーションがあります。 私はWebアプリケーションのセキュリティ部分に深く関わっているので、独自のセッションID(暗号化アルゴリズムを使用し、ユーザーがログインすると作成されるすべての新しいセッションに割り当てます)を生成しようとしていました。JSFで自分のセッションIDを生成する

誰でもセッションで手動生成されたセッションIDを設定し、セッションIDが送信されることを要求ごとに確保する方法に私を導いてください

おかげ

+3

コンテナで生成されたものを使用しないのはなぜですか? –

+0

@JB Nizet純粋にセキュリティ上の理由から、私のアプリケーションでは、セッションIDを強力な暗号化アルゴリズムを使って手動で生成する必要があります。セッションIDの設定方法を教えてください。 – AngelsandDemons

+0

@McDowell返信いただきありがとうございます。SPIを実装するにはプロとコンズを所有していますが、SPIを適切に保護するための余分なブテンがあり、コンテナ固有のSPIの機能をコンテナに統合する方法を検討しています...私は探していますより堅牢なソリューションではなく、コンテナSPIを実装しようとしています。JavaまたはJ2EEの観点からの任意のソリューションは高く評価されます。 – AngelsandDemons

答えて

2

コンテナ固有の拡張子を使用せずに、コンテナによって生成されたものよりも安全なセッションIDを生成することは本当に疑問ですが、ここではできることがあります。

サーバーへのすべての要求を代行受信するサーブレットフィルタを作成します。

リクエストが到着したら、このリクエストのセッションがすでに存在するかどうかを確認します(getSession(false)を使用)。存在する場合は、リクエストから特定のCookie MY_SESSION_IDを抽出し、その値をセッションに格納されている値と比較します。一致しない場合は、要求を拒否します。

セッションが存在しない場合は(getSession(true)を使用して)セッションを作成し、スーパーセキュリティで保護されたセッションIDを生成し、セッション属性として保存し、応答にCookie MY_SESSION_IDを追加します。

厳密には必要ない場合でも、セッションを自動的に作成するという欠点があります。しかし、これはコンポーネントフレームワークのJSPを使用するときのほとんどの場合です。

+0

私は既にすべての私の要求を傍受するように実装されたフィルタを持っています。また、新しいセッションを作成したり、既存のセッションにアクセスすることもできます。しかし、セッション属性にスーパーセキュアなセッションIDを格納し、応答にクッキーMY_SESSION_IDを追加すると、私のクエリは絶対に解決されます... – AngelsandDemons

1

JSFのアプリケーション層でこれを実行しようとするが、成功することはほとんどありません。。。I下位レベルのAPIでこのタスクを実行します。サーブレットコンテナを想定しています。

私は2つのアプローチを考えることができます:(1でも存在する場合)

  1. は、サーブレットを経由してリクエスト/レスポンスを書き換えることにより、これを行うサーバ固有のSPIを介したコンテナレベルでこれを行うFilter

最初のアプローチの実行可能性についてコメントするための情報が不十分です。

セッションクッキーの名前を決定する必要があります(通常はJSESSIONIDですが、必須ではありません)。あなたのAPIはなります

  1. は、すべてのアプリケーションにフィルタをマップしたセッションIDの要求で任意のセッションクッキーを書き換えるためにフィルタを使用
  2. ID「を確保」するために、コンテナのセッションIDのマップを維持
  3. を要求
  4. メモリリークに
を避けるために、マップから無効なセッションを削除する listenerを使用してセキュアID
  • に応じて任意のセッションクッキーを書き換えるフィルタを使用0
  • 関連する問題