加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 直接使用域模型的视图是否危险?

发布时间:2020-12-16 07:28:26 所属栏目:asp.Net 来源:网络整理
导读:我使用EF代码优先方法来定义我的数据库结构.目前,我将EF实体类直接传递给MVC应用程序中的一些视图.这样可以很容易地填充和保存视图,因为我可以直接拥有一个存储库,为我提供填充的EF类,如果我的控制器在回发中收到EF实体类,我可以(如果验证可以)直接通过到存
我使用EF代码优先方法来定义我的数据库结构.目前,我将EF实体类直接传递给MVC应用程序中的一些视图.这样可以很容易地填充和保存视图,因为我可以直接拥有一个存储库,为我提供填充的EF类,如果我的控制器在回发中收到EF实体类,我可以(如果验证可以)直接通过到存储库来保存它.但是,这可能存在安全隐患吗?如果实体类中有属性我不想修改,客户端是否可以将这些属性作为回发的一部分提交并修改它们?例如,假设我有一个视图来编辑我传递此EF模型的用户:

public class User {
    [Required]
    public string Firstname { get; set; }
    [Required]
    public string Surname { get; set; }
    public DateTime DOB { get; set; }
    public bool IsDisabled { get; set; }
}

我可能会将Firstname,Surname和DOB公开为可编辑的表单字段,但我不希望用户能够设置IsDisabled并禁用其帐户.防范这种情况的最佳方法是什么?也许人们只应该直接使用视图中的域模型,当一个人认为该域模型持久化的每个属性都可以被用户设置,或者当一个人只是使??用该域模型来显示事物时,而不是将事物保存回来数据存储?

解决方法

是的,将实体直接传递给您的视图可能会很危险.从技术上讲,问题是当你直接模拟绑定到实体时.

是的,你提出的情况很有可能发生.更糟.假设您使用了User对象,那么攻击者可以提交post值来执行类似设置IsAdmin true的操作,或者更改分配给用户的角色.

当然,所有这些都取决于用户是否知道(或能够猜测)数据的结构.这可能不像看起来那么困难,因为我们经常在生成的HTML中提供告示标记.

这个问题有两种解决方案:

1)使用视图模型.视图模型仅包含视图中允许的数据.您还可以控制将哪些数据复制回实体模型.

2)您可以使用[Bind]属性为白名单和黑名单指定排除和包含各种属性.

我更喜欢使用第一种方法,因为忘记白名单或黑名单会更加困难(特别是如果你以后改变某些东西而忘记在你绑定它的任何地方更新列表).我也觉得[Bind]是在欺骗并鼓励邋design的设计.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读