我有一个定义视图参数的 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>
在同一页面上,我有一个文本字段和一个允许用户更改 searchName 的按钮:
<h:form id="some-id">
<h:inputText value="#{nbsearchpage.searchName}" />
<h:commandButton value="search" action="#{nbsearchpage.search}" />
</h:form>
最后,nbsearchpage bean 中的 action 方法 search() 返回到同一页面,但包括参数:
?faces-redirect=true&includeViewParams=true
它为用户提供了一个不错的 URL。当用户在搜索字段中输入“IBM”时,URL 被重定向到
?searchName=IBM
它工作得非常好。但是现在用户可以在 searchName 文本字段中输入一个 EL 表达式,并计算 EL 表达式。例如,当用户在文本字段中输入“#{2+2}”时,URL 被重定向到
?searchName=4
这是我认为我们不应该做的,出于安全原因允许用户输入 EL 表达式。我正在使用 Glassfish 3.1.1。
任何想法如何防止这种自动 EL 解析?我认为 JSF2 中的视图参数概念和重定向存在根本缺陷?我对无法在重定向中幸存的视图范围有同样的问题,为此我必须创建一个自己的范围。(我本可以使用闪光范围)。