客户端可以在bean动作方法中更改EL方法参数的值吗?

时间:2015-12-01 11:18:12

标签: jsf el viewstate tampering method-parameters

我目前正按照一定的标准过滤文件清单。

然后我将此列表呈现给用户,我有一个

<p:commandButton action="#{controllerBean.downloadDocument(document.id)}" ajax="false" />

查看呈现的代码,我不会在任何地方看到文档ID,但这并不意味着它以某种方式编码,可以从客户端解码,更改和重新编码

我对JSF状态处理的理解相当薄弱但是,如果我错了,请纠正我:无法从客户端手动更改操作参数值的值,因为即使存储在客户端上,也只有服务器可以解码并编码会话状态,并将参数值存储在那里。我是对的,还是应该向downloadDocument(document.id)添加支票,以确保用户有权下载该特定document.id?我将来会添加这张支票,无论如何,但我想知道这个问题现在有多重要。

1 个答案:

答案 0 :(得分:3)

它作为MethodExpression存储在JSF组件树中(不在JSF视图状态中!),并且在命令组件触发的表单提交的INVOKE_APPLICATION阶段期间在服务器端进行评估有问题。它实际上决不编码为HTML输出,相反,例如, <f:param>(如果您熟悉PrimeFaces,那也正是<p:graphicImage>无法在其值中使用EL方法参数但仅通过嵌套{{1}使用HTTP请求参数的原因})。

唯一的“风险”是<f:param>的{​​{1}}评估值(间接)取决于客户端可以控制的某些请求范围状态,例如请求参数或请求路径。请再次注意,{@ 1}}在回发期间进行评估,而不是在初始请求期间进行评估。

为了更好地理解视图构建,渲染和状态保存,Q&amp; A下面的内容可能会有所帮助: