asp.net-mvc – 直接使用域模型的视图是否危险?
我使用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的设计. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC将数据从视图传递给控制器
- asp.net-mvc – 将EF 4.1代码首先将ASP.NET MVC3部署到中等
- asp.net-mvc – 如何将Azure AD身份验证用于单独的非Azure
- asp.net-mvc-4 – NReco.PdfGenerator服务器上的管道已经结
- azure – 错误System.BadImageFormatException服务结构
- asp.net-web-api – 交叉原始SignalR连接在协商后停止
- 我的带有Forms身份验证的ASP.NET MVC2应用程序甚至阻止访问
- 解决“这个操作需要IIS集成管道模式”在ASP.net MVC2
- asp.net – 从umbraco搜索中排除节点
- EF Core 数据变更自动审计设计
- asp.net – ASP .Net WorldPay集成
- asp.net-mvc – jQuery $.get调用Controller中的
- asp.net-mvc-3 – 在生产环境中使用DropCreateDa
- asp.net-mvc-4 – SimpleMembership – 向UserPr
- 一个ASP.NET Web应用程序中的经典.ASP和.NET .as
- asp.net-mvc – asp.net mvc用户身份验证/权限
- asp.net-mvc-3 – 在MVC中设置403错误页面
- asp.net-mvc – 使用List的奇怪剃刀行为
- asp.net-mvc – 在asp.net mvc中启动一组未选中的
- 接受List的ASP.NET Web方法失败,“Web服务方法名