用户可以设置JSF支持bean中的哪些属性?
我有一个支持bean( somebean
),它有三个布尔属性a
, b
和c
,每个都有一个getter和setter。
我有一个看起来像这样的表格:
B is true
客户可以设置三个属性a
, b
和c
哪a
? 我尝试在POST请求中添加b=true
和c=true
,但是SomeBean.setB(boolean)
和SomeBean.setC(boolean)
。 所以也许只能设置一个 – 逻辑是如果JSF中有一个字段设置它,客户端就可以设置它。 但也许我错了,它只是有一些我不知道的默认名称可以用来设置它…
我应该假设我的bean上的任何属性都可以由客户端设置吗? 如果没有,我应该假设客户端可以设置哪些(因此在validation期间必须担心)?
如果我有条件地渲染我的表单会发生什么? 例如:
在这种情况下,如果b
为假,还可以设置吗?
“客户端”是指将HTTP流量发送到我的网站的任何内容。 例如,可能是恶意代码。
用户可以设置JSF支持bean中的哪些属性?
绑定到EditableValueHolder
组件的那些组件,例如UIInput
和friends(包括
!),前提是它们在应用请求值阶段rendered="true"
, disabled="false"
和readonly="false"
。
另一种可能的方法是在请求范围bean的属性上使用@ManagedProperty("#{param.xxx}")
或在HTTP请求期间调用的某个bean方法中使用硬编码的ExternalContext#getRequestParameterMap()
访问。
因此, 只有当您作为开发人员明确地将属性绑定到可呈现的可编辑值持有者组件时,非禁用/只读,或者当您作为开发人员显式将请求参数设置为属性时。 在当前版本的JSF实现中绝对没有安全漏洞,可以通过HTTP方式设置未声明/未绑定属性。 甚至不可能通过欺骗HTTP请求向UISelectOne
或UISelectMany
组件发送任意值,它只会在“validation错误:值无效”中结束 。
对于旧版JSF实现中的安全漏洞,只有当您在早于2.0.7和2.1.5的Mojarra版本中使用includeViewParams="true"
导航到不同的视图时,才会在视图参数中使用所有EL表达式,例如将评估#{bean.setArbitraryProperty('foo')}
。 另见问题2247 。 我不知道MyFaces有任何安全漏洞; 这不是因为本身没有,而仅仅是因为我没有密切使用/跟踪它。