0

ATG 10.1.2 で weblogic 10.3.6 を使用しています

JSESSIONID をセキュアにしたいので weblogic.xml を以下のように設定してみましたが、

<session-descriptor>
    <cookie-name>JSESSIONID</cookie-name>
    <timeout-secs>1200</timeout-secs>
    <cookie-secure>true</cookie-secure>
    <url-rewriting-enabled>false</url-rewriting-enabled>
</session-descriptor>

auth-coookie-enabled を false に変更して、weblogic.xml からの cookie-secure を受け入れるかどうかを確認しようとしましたが、そうではありません。

<web-app-container>
    <x-powered-by-header-level>SHORT</x-powered-by-header-level>
    <auth-cookie-enabled>false</auth-cookie-enabled>
  </web-app-container>

spakred の連中は以前に同様の投稿 ( httpOnly の脆弱性の修正) を投稿しました。そこで彼らは runAssembler コマンドの問題を強調しました。そこで提供されたソリューションは weblogic でも機能しません(そこにコメントを残しました)。Weblogic は context.xml もチェックしません(無効な XML を入れてみましたが、起動時にエラーは発生しませんでした)

また、weblogic.xml の cookie-name を別の名前に変更しても、JSESSIONID が生成され、新しい Cookie が安全になることにも気付きました。

- この Cookie を生成するものは他にありますか?
- weblogic が JSESSIONID を保護したり、そのパスを変更したりできないのはなぜですか(Cookie パスを変更すると、2 つの JESSIONID Cookie が送信されます)。

誰かがこれを以前に試したことがありますか、あなたの考えを共有してください.

4

2 に答える 2

0

ATG によって発行されている Cookie を見ると、web.xml をカスタマイズした Web アプリのコンテキストではなく、ルート コンテキスト パス (例: Path=/;) に発行されていることがわかります。為に。

ATG でのセッションの管理方法が原因で、weblogic.xml 設定が考慮されていない可能性があります。

デフォルトでは、セッションは通常、ATG の Web アプリ間で共有されます。これは、セッションが Web アプリ固有である標準的な J2EE の動作とは少し異なりますが、ATG は顧客が望むマルチサイト機能の一部をサポートできます。

それで、ここで何が起こっているのですか?

ATG には、Web アプリでセッションを開始するたびに作成される「親」セッション コンテキストの概念があります。そのため、異なるコンテキスト ルートを持つさまざまな Web アプリにヒットする可能性がありますが、ATG は内部的に単一の「親」セッションのみを作成します。この親セッションは通常、デフォルトで atg_bootstrap.war Web アプリにバインドされます。

いくつかのオプション:

  1. EAR をビルドしたら、'cookie-secure' 設定を true にして weblogic.xml ファイルを atg_bootstrap.war/WEB-INF フォルダにドロップしてみてください。これは最終的に「親」セッションを作成する Web アプリケーションであるため、ここで weblogic.xml 設定が有効になります。
  2. または、デフォルトの ATG セッション共有動作をオーバーライドして、単一の Web アプリに対してセッションを発行させることもできます。たとえば、コンテキスト「/store」を持つ Web アプリがある場合、親 (「/」) コンテキストではなく、この Web アプリ コンテキストにセッションをバインドすることができます。これを行うには、weblogic.xml の「cookie-path」要素を Web アプリケーションのコンテキスト パスに設定してみてください。たとえば、Web アプリのコンテキスト ルートが「/store」の場合:
<session-descriptor>
  <cookie-path>/store</cookie-path>
  <cookie-secure>true</cookie-secure>
</session-descriptor>

異なる Web アプリ間でセッションを共有する場合、この 2 番目のオプションではマルチサイトの動作が損なわれる可能性があることに注意してください。

Oracle KB (support.oracle.com) 内に、ATG でのセッション管理の動作について説明している優れた記事があります。

  • Doc ID 1364857.1: WebLogic、JBoss、および WebSphere での ATG セッション管理のしくみ
于 2014-09-18T13:48:53.897 に答える
0

これですべての質問に答えられるわけではありませんが、少なくとも、ATG と Weblogic がどのように連携するかについての背景知識を得ることができます。

コンポーネントを確認することをお勧めし/atg/dynamo/servlet/sessiontracking/GenericSessionManagerます。プロパティのsingleSessionIdPerUserデフォルト値は、WebLogic、Websphere、jBoss で実行しているアプリケーション サーバーによって異なります。Weblogic ではこのプロパティが に設定されていますがfalse、jBoss と WebLogic では が設定されてtrueいます。これが、WebLogic セッション ID に基づく ATG 固有のセッション ID のサーバー側ルックアップがあるため、Weblogic には脆弱性が存在しないと私が考える理由です (セキュリティで保護されていると仮定します)。 Web ロジック jsessionid)。

ATG ヘルプから:

singleSessionIdPerUser 値が true の場合、アプリケーション サーバーはすべての Web アプリケーションに同じセッション ID を使用するため、ルックアップは必要ありません。アプリケーション サーバーは同じセッション ID を渡しますが、同じ HttpSession オブジェクトではないことに注意してください。

singleSessionIdPerUser が false の場合、ルックアップによってセッション名のコンテキスト ID が決定されます。これは、RequestDispatcher.include() 呼び出しを使用して、atg.nucleus.servlet.SessionNameContextServlet サーブレット (atg_bootstrap.war に含まれる) によって行われます。SessionNameContextServlet は次の 2 つのことを行います。

親セッション ID を要求属性として設定します。これは、子 Web アプリケーションが正しいセッション コンテキストにバインドするために使用できます。

Web アプリケーション間での要求属性の共有を許可しないアプリケーション サーバーの場合、ATG_SESSION_ID という名前の Cookie にセッション ID を設定します。この動作は、アプリケーション サーバーごとに正しい値で事前構成されている /atg/dynamo/servlet/sessiontracking/GenericSessionManager.useSessionTrackingCookie プロパティによって制御されます。

詳細については、こちらをご覧ください

また、Web logic/atg でプログラムによってユーザーをログアウトすることに関する SO の質問に対する私の回答singleSessionIdPerUser=falseを参照してください。これは、上記のweblogic に関連していると思われます

于 2014-09-15T18:24:04.480 に答える