JSF 安全性:bean 方法可访问性

JSF Security: bean method accessibilty

我有一个关于 JSF ManagedBeans 的基本问题,我找不到答案。

假设我有一个带有两个方法 method1method2 的 bean MyBean 和一个带有命令 link

的 JSF 页面
<h:commandLink action="#{myBean.method1}">
</h:commandLink>

是否有人可以分析页面的源代码并调用 method2 而不是 method1

是的,总是可以修改 client-side 上的代码(或 markup-language)。您的 "action" 将通过某些形式被调用 and/or Javascript-Methods - 经验丰富的用户可以看到所有内容。

但这不仅仅是 JSF-2 的问题——这适用于允许从客户端获得洞察力的每一种语言。

您不应申请 "security through obscurity" (https://en.wikipedia.org/wiki/Security_through_obscurity),而应确保您可以在 server-side 上处理此问题。

如果有权访问两个 url 的用户将 url1 修改为 url2 - 没问题,为什么不呢? (可以添加书签)-但是如果不允许他访问 url2.

,您应该处理修改后的请求

回答

不,这在设计上是不可能的。

推理

从技术上讲,客户端只能告诉服务器“用户单击了具有特定 ID 的 html 元素”。 然后,此事件由服务器端的 JSF 处理,查找具有相应 ID 的组件,在这种情况下,执行方法“#{myBean.method1}”。 如您所见,客户端无法[!]告诉服务器如何处理此事件。

来源

JSF 2.2 规范 - 3.4 事件和侦听器模型

警告
JSF 是有状态的,有多种方法可以保持这种状态。默认是在服务器端保存状态信息(例如在用户 HttpSession 中)。
另一种选择是在客户端之间传输(加密的)状态。这在概念上仍然是安全的,但*可能*存在客户端状态保存的错误。这样的错误*可以*被利用来做你描述的事情。