2

JSF 1.2 と Mojarra を使用してビューステートを暗号化する方法を見つけようとしています。奇妙なことに、一部のサーバーではデフォルトで暗号化されているように見えますが、他のサーバーでは暗号化されていないようです. たとえば、ローカルホストでは次のように表示されます。

<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-40233784603124937:-3413182513789758151" autocomplete="off" />

しかし、テスト環境サーバーでは次のようになります。

<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id4:j_id5" />

これら 2 つの違いに気付くでしょう。

  1. 最初は autocomplete="off" です
  2. 1 つ目は viewState 値が暗号化されていますが、2 つ目は暗号化されていません。

問題は、なぜこの 2 つが違うのか、一生わからないことです。私のローカルホストとサーバーのコードベースは同じです。私の web.xml には構成オプションが指定されていないため、私のローカルホストは暗号化されていないと想定していました (それがデフォルトですよね?)。

Mojarraのドキュメントに従って、次を追加する必要があります。

<env-entry>
 <env-entry-name>com.sun.faces.ClientStateSavingPassword</env-entry-name>
 <env-entry-type>java.lang.String</env-entry-type>
 <env-entry-value>[SOME VALUE]</env-entry-value>
</env-entry>

しかし、それはサーバー側の状態の保存ではなく、クライアントの状態の保存に特化しているようです。そして、私が誤解していない限り、サーバー側の状態保存を使用しています (少なくとも、javax.faces.STATE_SAVING_METHOD.

だから、私の質問:

  1. ローカルホストとサーバーで構成が異なるのはなぜですか? web.xml 以外にオプションを指定できる場所はありますか?
  2. すべてのサーバーで viewState 暗号化 (ローカルホストなど) を有効にするにはどうすればよいですか?

構成:

  • JBoss 5.1.0.GA
  • モハラ 1.2_12-b01-FCS
  • Seam 2.2.0.GA
4

1 に答える 1

1

ビュー ステートの非表示フィールドは、問題 1129autocomplete="off"に従って Mojarra 1.2_13 で導入されました。別のビュー ステート ID アルゴリズム (CSRF 攻撃の影響を受けにくい) が Mojarra 1.2_14 で導入されました (対応する問題レポートが見つかりません。私が知っているのは、それが初めて JSF 2.0 用に指定され、後で にバックポートされたことだけです)。モハラ 1.2)。

症状を考えると、テスト環境は実際には少なくとも Mojarra 1.2_14 を実行しているように見えます。JSF のバージョンを合わせます。Mojarra 1.2 は現在、すでに 1.2_16 です。JBoss はデフォルトで Mojarra がバンドルされて出荷されることに注意してください。

于 2013-02-27T13:20:28.813 に答える