2013-02-26 77 views
1

我想弄清楚如何使用JSF 1.2和Mojarra来加密视图状态。奇怪的是,它似乎在某些服务器上被默认加密,而在其他服务器上则没有。举例来说,在我的本地我看到以下内容:在Mojarra的JSF 1.2中配置JSF视图状态加密

<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. 第一个具有自动完成=“关”
  2. 第一个viewState值已加密,而第二个没有

问题是,我无法弄清楚为什么两者不同,我的生活。代码库在我的本地主机上与在服务器上相同。在我的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. 我的配置为什么会是本地主机和服务器之间有什么不同?有没有别的地方可以选择比web.xml中规定的其他?
  2. 如何我们所有的服务器上做我启用ViewState的加密(如在我的本地)?

配置:

  • 的Jboss 5.1.0.GA
  • 钻嘴鱼科1.2_12-B01-FCS
  • 煤层2.2.0.GA

回答

1

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

鉴于症状,它看起来像你的测试环境是实际上至少运行莫哈拉1.2_14。整理出你的JSF版本。 Mojarra 1.2在0123_已经在1.2_16。请注意,JBoss捆绑了Mojarra默认发货。

+0

谢谢,我将在服务器上挖掘Mojarra版本。我从jboss配置文件中取出1.2_12,但也许我们有一些压倒一切的东西。稍后会报告。 – 2013-02-27 14:27:38

+0

另一个可能的原因是脏类路径。例如。已将JSF库放在'/ JRE/lib'或'/ JRE/lib/ext'中,以便修复'javac'或IDE中的编译错误(一些根本不理解“classpath”概念的开始者会这样做) 。 – BalusC 2013-02-27 14:29:13

+0

你是对的。似乎在某个时候有人更新了我们的开发环境中分发的Mojarra jar。那是在1.2_14,而我们的其他环境在1.2_12。这解释了这个问题。我假设视图状态ID算法实际上被反向移植到1.2_14,而不是1.2_15。谢谢您的帮助! – 2013-02-27 15:05:27