使用Mojarra在JSF 1.2中配置JSF viewstate加密

时间:2013-02-26 21:21:30

标签: jsf viewstate jboss5.x jsf-1.2 mojarra

我试图弄清楚如何使用JSF 1.2和Mojarra加密视图状态。奇怪的是,它似乎在某些服务器上默认加密,但在其他服务器上则没有。例如,在我的localhost上,我看到以下内容:

<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" />

你会发现这两者之间有两点不同:

  1. 第一个有autocomplete =“off”
  2. 第一个加密了viewState值,而第二个没有
  3. 问题在于我无法弄清楚为什么两者有所不同。我的localhost上的代码库与服务器上的代码库相同。我的web.xml中没有指定配置选项,所以我假设我的localhost不会被加密(因为这是默认的,对吧?)。

    the Mojarra documentation我应该添加:

    <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. 为什么我的配置在localhost和服务器之间有所不同?除了web.xml之外,是否还可以指定其他选项?
    2. 如何在所有服务器上启用viewState加密(就像在我的localhost上一样?)
    3. 配置:

      • Jboss 5.1.0.GA
      • Mojarra 1.2_12-b01-FCS
      • Seam 2.2.0.GA

1 个答案:

答案 0 :(得分:1)

根据issue 1129,Mojarra 1.2_13中引入了视图状态隐藏字段中的autocomplete="off"。在Mojarra 1.2_14中引入了不同的视图状态ID算法(对CSRF攻击敏感度较低)(我找不到相应的问题报告,我所知道的是它首次为JSF 2.0指定,后来又向后移植到Mojarra 1.2)。

鉴于症状,看起来您的测试环境实际至少运行Mojarra 1.2_14。找出你的JSF版本。 Mojarra 1.2已经currently已经是1.2_16。请注意,JBoss默认使用Mojarra捆绑。