【问题标题】:Model passed to view + accessible to end user模型传递给视图 + 最终用户可以访问
【发布时间】:2014-06-19 11:09:06
【问题描述】:

您好,我是堆栈溢出的新手。

我已经开始使用asp.net mvc开发网站了。

我有一个存储大量信息的数据库,其中一些我不想显示给最终用户。

一个示例 db 表 - Property.sql

Id, Address, Area, Price, Owner Phone no, Owner home address

我创建了一个对该数据库表(模型)进行强类型化的视图,但该视图仅使用“地址”、“区域”和“价格”字段

这是一个安全问题 -

有人可以使用 fiddler 或以其他方式访问传递给视图的其他字段吗?或者,视图是否首先使用所需的信息生成,然后传递给浏览器?

【问题讨论】:

    标签: asp.net-mvc security model-view-controller viewmodel


    【解决方案1】:

    不,视图在发送到浏览器之前在服务器端呈现,因此客户端不可能看到此信息。但是,将域模型泄漏到您的视图中并不是一个好主意,您应该创建特定于视图的模型并传递它们,例如

    public class Customer
    {
        public Guid Id { get; set; }
        public string Address { get; set; }
        public string Area { get; set; }
        public decimal Price { get; set; }
        public string Owner { get; set; }
        ...
    }
    
    public class CustomerViewModel
    {
        public string Address { get; set; }
        public string Area { get; set; }
        public decimal Price { get; set; }
    }
    

    【讨论】:

    • 然后我会使用 Automapper 之类的东西在两个对象之间映射数据。
    【解决方案2】:

    如果您担心将模型数据暴露给视图(客户端),请使用特定于页面需求的视图模型。

    然而,如果您不序列化您的模型并且仅使用它来填充视图中的一些数据(在服务器端),那么额外的数据不会暴露给客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      相关资源
      最近更新 更多