gpt4 book ai didi

redirect - 带有 includeViewParams 的 JSF2 重定向允许用户输入解析为文本字段的 EL 表达式

转载 作者:行者123 更新时间:2023-12-03 23:55:23 24 4
gpt4 key购买 nike

我有一个定义 View 参数的 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&amp;includeViewParams=true

它为用户提供了一个很好的 URL。当用户在搜索字段中输入“IBM”时,URL 被重定向到
?searchName=IBM 

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

这是我认为我们不应该做的,出于安全原因,允许用户输入 EL 表达式。我正在使用 Glassfish 3.1.1。

任何想法如何防止这种自动 EL 解析?我认为 JSF2 中的 View 参数概念和重定向存在根本缺陷?我对无法在重定向中存活的 View 范围有同样的问题,为此我必须创建一个自己的范围。 (我可以使用闪光灯范围)。

最佳答案

我可以在 Mojarra 2.1.4 上重现这个。这绝对是不可取的。我已将其报告给 Mojarra 人员 issue 2247 (如果可以,请投票)。顺便说一下,MyFaces 2.1.3 也暴露了同样的问题。

考虑到根本原因是在特定于 JSF 实现的实用程序类中,没有想到针对此特定问题的简单解决方法。您可以轻松地在您的 /WEB-INF/classes 中拥有一个修改过的副本。 ,但要独立于实现,您必须完全重新实现 ViewHandlerImpl或者 ExternalContextImpl并提供它作为定制的,但这是很多工作。

但是,因为您已经在使用 <f:viewParam> ,您也可以只使用 <form>而不是 <h:form><input type="submit">而不是 <h:commandButton> :

<form>
<h:inputText id="searchName" value="#{nbsearchpage.searchName}" />
<input type="submit" value="search" />
</form>

并在预渲染 View 事件监听器中执行操作方法。这也是在 JSF 中使用 GET 表单的更合适的方式,如 <h:form>仅用于 POST。

无关 具体问题:

I had the same problem with the view scope that does not survive redirects, and for this I had to create an own scope.



幸存的重定向从来都不是 View 范围的意图。只要您与同一个 View 交互(尤其是通过 Ajax 和有条件地重新渲染内容), View 范围就会一直存在。您基本上是在寻找对话范围。你应该看过 CDI 的 @ConversationScoped MyFaces CODI .

关于redirect - 带有 includeViewParams 的 JSF2 重定向允许用户输入解析为文本字段的 EL 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com