在视图JSP中使用模型bean的漏洞

时间:2016-06-28 11:04:30

标签: java model-view-controller

我在Spring和Struts中看到了数百个示例,其中在视图中使用了模型bean,我想知道它是否是一个漏洞,解决它的最佳方法是什么。

一个愚蠢的例子。我们有一个模型bean:

public class User {
    private String name;
    private String pass;
    //getters and setters
}

我们必须观看(jsp)

  1. ADMINVIEW:视图仅允许管理员使用包含2个字段(名称和密码)的表单。
  2. USERVIEW:普通用户的视图,其中我们的表单包含1个字段(名称)
  3. 在服务层(应该是视图的抽象)中,我们有一个方法:

    if(pass.isEmpty)
       createNormalUser();
    else 
       createAdminUser();
    

    在USERVIEW中,入侵者可以使用两个字段(例如,修改浏览器中的数据),因为它们在两个视图(USERVIEW和ADMINVIEW)中打开,因为它是相同的bean(用户)。

    好吧这是一个愚蠢的例子,但在复杂的webapp中,你不能保证模型bean的这种行为完全被避免,因为你可以拥有一个复杂的业务逻辑和数百个修改bean可能产生不需要的行为的情况。更重要的是,请记住,服务层应独立于视图层。

    因此有必要在控制器层(Spring中的控制器或struts中的操作)中控制它。

    解决问题的最佳方法是什么?

    • 使用包含bean模型类型对象的表单bean getter和setter仅适用于表单中使用的字段。
    • 在每个控制器中验证只有表单中的字段 允许附带数据
    • 其他?

0 个答案:

没有答案