【问题标题】:JSF Security: bean method accessibiltyJSF 安全性:bean 方法可访问性
【发布时间】:2018-08-05 15:16:05
【问题描述】:

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

假设我有一个带有两个方法 method1method2 的 bean MyBean 和一个带有命令链接的 JSF 页面

<h:commandLink action="#{myBean.method1}">
</h:commandLink>

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

【问题讨论】:

标签: security jsf-2 managed-bean


【解决方案1】:

回答

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

推理

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

来源

JSF 2.2 Spec - 3.4 事件和监听器模型

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

【讨论】:

    【解决方案2】:

    是的,始终可以在客户端修改代码(或标记语言)。您的“操作”将通过某些表单和/或 Javascript 方法调用 - 有经验的用户可以看到所有内容。

    但这不仅仅是 JSF-2 的问题 - 这适用于所有允许来自客户端的洞察力的语言。

    您不应该应用“通过默默无闻的安全性”(https://en.wikipedia.org/wiki/Security_through_obscurity) 而是确保您可以在服务器端处理此问题。

    如果有权访问两个 URL 的用户将 url1 修改为 url2 - 这很好,为什么不呢? (可以加书签) - 但是如果不允许他访问url2,您应该注意修改后的请求。

    【讨论】:

    • 如果您对问题“回答”是,然后在第二段中“否定”它,这有点令人困惑。我会删除“是”作为第一个词
    • 抱歉,不小心按了 Enter。您快速阅读我的评论 ;-) 我编辑了它
    • 不,如果您在同一个视图中操作客户端,则 JSF 不可能做到这一点......视图状态阻止了这一切......(对)方法的(引用)方法没有存储在客户端中。这是我更喜欢 JSF 而不是所有需要添加各种 OWASP 东西的 JavaScript 框架的原因之一......保护对不同 URL(每个都有自己的 bean/方法)的访问取决于开发人员,就像正常的网络应用程序。但是,如果您认为自己是对的,请纠正我并指出我的“参考”文件,其中说明可以进行此类操作
    • 修改请求,导致在服务器上调用与页面最初不同的方法。 是问题(你甚至在我编辑的第一条评论的第二条评论中复制了它)。那是最新的 JSF 库或正确配置的旧库是不可能的。是的,您可以操纵客户端视图状态并将其发送到服务器,但服务器会检测到篡改并拒绝处理请求......默认情况下它在 JSF(客户端和服务器的组合)和其他 javascript UI 框架中需要 OWASP 等等...
    • 的答案“是否有人可以分析页面的源代码并调用method2而不是method1?”非常肯定不是“是”,因此否决票。否则 JSF 已经被破坏了 16 年以上。
    猜你喜欢
    • 1970-01-01
    • 2014-12-11
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2020-02-21
    • 2014-09-25
    • 2014-01-20
    相关资源
    最近更新 更多