gpt4 book ai didi

java - JSF 支持 bean 中的哪些属性可以由用户设置?

转载 作者:行者123 更新时间:2023-11-30 09:19:58 24 4
gpt4 key购买 nike

我有一个支持 bean (somebean),它具有三个 boolean 属性 abc,每个都有一个 getter 和 setter。

我有一个看起来像这样的表格:

<h:outputText rendered="#{somebean.b}">
B is true
</h:outputText>
<h:form id="blah">
<h:inputHidden value="#{somebean.a}" id="a"/>
<h:commandLink id="zzzz" value="do it" action="#{somebean.doIt}"/>
</h:form>

客户端可以设置abc这三个属性中的哪一个?我尝试将 b=truec=true 添加到 POST 请求,但是 SomeBean.setB(boolean)SomeBean.setC (boolean) 永远不会被调用。所以也许只能设置 a - 逻辑是如果 JSF 中有一个字段设置它,则允许客户端设置它。但也许我错了,它只是有一些我不知道的默认名称可以用来设置它...

我是否应该假设我的 bean 上的任何属性都可以由客户端设置?如果不能,我应该假设客户可以设置哪些(因此在验证期间必须担心)?

另外,如果我有条件地呈现我的表单会怎样?例如:

<h:outputText rendered="#{somebean.b}">
<h:form id="blah">
<h:inputHidden value="#{somebean.a}" id="a"/>
<h:commandLink id="zzzz" value="do it" action="#{somebean.doIt}"/>
</h:form>
</h:outputText>

在这种情况下,如果b为false,a还能被设置吗?


“客户端”是指任何向我的站点发送 HTTP 流量的东西。例如,这可能是恶意代码。

最佳答案

Which properties in a JSF backing bean can be set by a user?

绑定(bind)到 EditableValueHolder 的那些组件,例如 UIInput 和 friend (包括 <f:viewParam> !),前提是他们是 rendered="true" , disabled="false"readonly="false"在应用请求值阶段。

另一种可能的方法是通过 @ManagedProperty("#{param.xxx}")在请求作用域 bean 或硬编码的属性上 ExternalContext#getRequestParameterMap()访问在 HTTP 请求期间调用的一些 bean 方法。

因此,当您作为开发人员明确将属性绑定(bind)到呈现的、非禁用/只读的可编辑值持有者组件时,或者当您作为开发人员明确设置请求时参数作为属性。在当前版本的 JSF 实现中,绝对没有关于通过 HTTP 方式设置未声明/未绑定(bind)属性的可能性的安全漏洞。甚至不可能将任意值发送到 UISelectOneUISelectMany通过欺骗 HTTP 请求的组件,它只会以 "Validation Error: Value is not valid" 结束.


至于旧版 JSF 实现中的安全漏洞,只有当您使用 includeViewParams="true" 导航到不同的 View 时才会出现这种情况。在早于 2.0.7 和 2.1.5 的 Mojarra 版本中, View 参数中的所有 EL 表达式如 #{bean.setArbitraryProperty('foo')}将被评估。另见 issue 2247 .我不知道 MyFaces 中有任何安全漏洞;这并不是因为本身没有,而只是因为我没有密切使用/跟踪它。

关于java - JSF 支持 bean 中的哪些属性可以由用户设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17685804/

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