客户端可以更改 bean 操作方法中 EL 方法参数的值吗?
Can client change value of EL method parameter in bean action method?
我目前正在根据特定条件过滤文档列表。
然后我将这个列表呈现给用户并且我有一个
<p:commandButton action="#{controllerBean.downloadDocument(document.id)}" ajax="false" />
查看呈现的代码,我在任何地方都看不到文档 ID,但这并不意味着它以某种方式编码并且可以从客户端解码、更改和重新编码.
我对 JSF 状态处理的理解很薄弱,但如果我错了请纠正我:从客户端手动更改操作参数值是不可能的,因为即使存储在客户端上,也只有服务器可以解码和编码会话状态,参数值存储在那里。我是对的还是应该向 downloadDocument(document.id)
添加检查以确保用户有权下载特定 document.id
?无论如何我都会在将来添加此检查,但我想知道这个问题现在有多严重。
它作为 MethodExpression
存储在 JSF 组件树中(而不是在 JSF 视图状态中!)并且在由有问题的命令组件。它确实绝不会编码为 HTML 输出,与例如相反。 <f:param>
(如果您熟悉 PrimeFaces,这也正是 <p:graphicImage>
无法在其值中使用 EL 方法参数而只能通过嵌套 <f:param>
).
唯一的 "risk" 是在 INVOKE_APPLICATION
期间 #{document}
的评估值(间接)取决于一些可以由客户端控制的请求范围状态,例如请求参数或请求路径。请再次注意 #{document}
是在回发期间评估的,而不是在初始请求期间评估的。
为了更好地理解视图构建、渲染和状态保存,以下问答可能会有所帮助:
- How does the 'binding' attribute work in JSF? When and how should it be used?
我目前正在根据特定条件过滤文档列表。
然后我将这个列表呈现给用户并且我有一个
<p:commandButton action="#{controllerBean.downloadDocument(document.id)}" ajax="false" />
查看呈现的代码,我在任何地方都看不到文档 ID,但这并不意味着它以某种方式编码并且可以从客户端解码、更改和重新编码.
我对 JSF 状态处理的理解很薄弱,但如果我错了请纠正我:从客户端手动更改操作参数值是不可能的,因为即使存储在客户端上,也只有服务器可以解码和编码会话状态,参数值存储在那里。我是对的还是应该向 downloadDocument(document.id)
添加检查以确保用户有权下载特定 document.id
?无论如何我都会在将来添加此检查,但我想知道这个问题现在有多严重。
它作为 MethodExpression
存储在 JSF 组件树中(而不是在 JSF 视图状态中!)并且在由有问题的命令组件。它确实绝不会编码为 HTML 输出,与例如相反。 <f:param>
(如果您熟悉 PrimeFaces,这也正是 <p:graphicImage>
无法在其值中使用 EL 方法参数而只能通过嵌套 <f:param>
).
唯一的 "risk" 是在 INVOKE_APPLICATION
期间 #{document}
的评估值(间接)取决于一些可以由客户端控制的请求范围状态,例如请求参数或请求路径。请再次注意 #{document}
是在回发期间评估的,而不是在初始请求期间评估的。
为了更好地理解视图构建、渲染和状态保存,以下问答可能会有所帮助:
- How does the 'binding' attribute work in JSF? When and how should it be used?