【问题标题】:Does JSF prevent calls to unrendered managed bean actions by tampered requestsJSF 是否防止被篡改的请求调用未呈现的托管 bean 操作
【发布时间】:2015-11-05 19:46:24
【问题描述】:

托管 bean 中的方法受 JSF 保护?见代码:

托管豆

@ManagedBean
public class My {
    public void test() {
        System.out.println("called");
    }
}

XHTML

<h:form>
    <h:commandButton rendered="true" action="#{my.test}" value="Teste" />
</h:form>

如果按钮未呈现(rendered="false"),可以完成 HTTP POST 请求(就像按钮所做的那样)并调用 test() 方法?

换句话说,JSF 防止被篡改的请求调用托管 bean 方法?

【问题讨论】:

  • 我不确定你在问什么,也许你可以告诉我们你尝试它时发生了什么(发送 HTTP POST 请求)?
  • 谢谢@ElliottFrisch。我做了这个程序。发送请求,当按钮被渲染时,方法被调用。如果没有,什么都不会发生。但是我想知道理论上的解释...
  • 从哪个角度? JSF 呈现为 HTML 和 javascript,查看浏览器开发者工具(通常是 F12)。
  • 是的,我使用开发者工具来捕获发布请求。在此之后,使用高级休息客户端执行一个新的请求,有和没有按钮。

标签: security jsf managed-bean commandbutton conditional-rendering


【解决方案1】:

换句话说,JSF 防止通过篡改请求调用托管 bean 方法?

是的。

JSF 在应用请求值阶段重新评估组件的rendered 属性。如果是false,那么对于UICommand 组件,ActionEvent 根本不会排队,无论(被篡改的)HTTP 请求参数是否指示按钮被按下。

JSF 对disabledreadonly 属性以及UIInput 组件的篡改请求具有类似的保护措施。而且,在UISelectOne/UISelectMany 组件中,JSF 将验证提交的值是否确实是提供的可用选项的一部分。

JSF 也借助视图状态来完成这一切。如果 JSF 是无状态的,那么如果这些属性突然变成请求范围而不是视图范围,那么其中一个或另一个可能会失败的风险会更大。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多