我有一个关于JSF ManagedBeans的基本问题,我无法找到答案。
假设我有一个bean MyBean
,它有两个方法method1
和method2
以及一个带有命令链接的JSF页面
<h:commandLink action="#{myBean.method1}">
</h:commandLink>
是否有人可以分析网页的源代码并致电method2
而不是method1
?
答案 0 :(得分:2)
不,这在设计上是不可能的。
从技术上讲,客户端只能告诉服务器“用户点击了具有特定ID的html元素”。 然后,JSF在服务器端处理此事件,查找具有相应id的组件,在这种情况下执行方法“#{myBean.method1}”。 如您所见,客户端无法[!]告诉服务器如何处理此事件。
JSF 2.2 Spec - 3.4事件和监听器模型
买者
JSF是有状态的,有多种方法可以保持这种状态。默认是保存服务器端的状态信息(例如在用户HttpSession中)
另一种选择是向客户端传输(加密)状态。这在概念上仍然是安全的,但可能是客户端状态保存的错误。这样的错误可以被利用来做你所描述的事情。
答案 1 :(得分:-2)
是的,始终可以在客户端修改代码(或标记语言)。您的“操作”将通过某些表单和/或Javascript-Methods调用 - 有经验的用户可以看到所有内容。
但这不仅仅是JSF-2的问题 - 这适用于允许客户端见解的每种语言。
您不应该通过默默无闻来应用“安全性”(https://en.wikipedia.org/wiki/Security_through_obscurity),而是确保您可以在服务器端处理此问题。
如果有权访问两个网址的用户将url1
修改为url2
- 那很好,为什么不呢? (可以加入书签) - 但如果不允许他访问url2
,您应该处理修改后的请求。