Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redirect JSF2重定向和IncludeDeviceParams允许用户输入解析为文本字段的EL表达式_Redirect_Jsf 2_El_Viewparams - Fatal编程技术网

Redirect JSF2重定向和IncludeDeviceParams允许用户输入解析为文本字段的EL表达式

Redirect JSF2重定向和IncludeDeviceParams允许用户输入解析为文本字段的EL表达式,redirect,jsf-2,el,viewparams,Redirect,Jsf 2,El,Viewparams,我有一个定义视图参数的JSF2 XHTML页面,这允许一个具有可书签URL的页面。XHTML页面包括以下参数: <f:metadata> <f:viewParam name="searchName" value="#{nbsearchpage.searchName}" /> <!-- More view parameters omitted here for brevity --> <f:event listener="#{nbsearchp

我有一个定义视图参数的JSF2 XHTML页面,这允许一个具有可书签URL的页面。XHTML页面包括以下参数:

<f:metadata>
  <f:viewParam name="searchName" value="#{nbsearchpage.searchName}" />
  <!-- More view parameters omitted here for brevity -->
  <f:event listener="#{nbsearchpage.searchPreRender}" type="javax.faces.event.PreRenderViewEvent" />
</f:metadata>
?faces-redirect=true&amp;includeViewParams=true
它为用户提供了一个很好的URL。当用户在搜索字段中输入“IBM”时,URL将重定向到

?searchName=IBM 
?searchName=4
它工作得非常好。但现在用户可以在searchName文本字段中输入EL表达式,并对EL表达式进行计算。例如,当用户在文本字段中输入“#{2+2}”时,URL将重定向到

?searchName=IBM 
?searchName=4
这是我认为我们不应该做的,因为安全原因,允许用户输入EL表达式。我使用的是Glassfish 3.1.1


有没有办法防止这种自动EL解析?我认为JSF2中的视图参数概念和重定向有一个基本缺陷?我对视图作用域也有同样的问题,它不能在重定向中生存,为此我必须创建一个自己的作用域。(我本来可以用闪光灯的)

我可以在Mojarra 2.1.4上重现这一点。这绝对是不可取的。我已经向莫哈拉的人报告了这件事(如果可以,请投赞成票)。顺便说一下,MyFaces2.1.3也暴露了同样的问题

由于根本原因是在JSF实现特定的实用程序类中,所以没有想到解决这个特定问题的简单方法。您可以轻松地在
/WEB-INF/classes
中拥有一个修改后的副本,但要独立于实现,您必须完全重新实现
ViewHandlerImpl
,或者可能是
ExternalContextImpl
,并将其作为自定义副本提供,但这需要大量工作

但是,由于您已经在使用
,您也可以只使用
而不是
而不是


并改为在预渲染视图事件侦听器中执行操作方法。这也是在JSF中使用GET表单的一种更合适的方法,因为
仅用于POST


与具体问题无关

我对视图作用域也有同样的问题,它不能在重定向中生存,为此我必须创建一个自己的作用域


存活重定向从来不是视图范围的目的。只要您与同一视图交互(特别是通过Ajax和有条件地重新呈现内容),视图范围就一直存在。你基本上是在寻找对话的范围。您应该已经了解了CDI的or。

这个问题在MyFaces核心版本2.0.11、2.1.5和Mojarra版本2.0.7、2.1.5、2.1.6中都得到了解决


只需使用更新版本。

我可以用Mojarra 2.1.2重现这一点,这是一个严重的安全漏洞,因为它还允许访问会话属性和调用任意方法。