我使用 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
和禁用他们的帐户。预防这种情况的最佳方法是什么?或许只有在认为用户可以设置由该域模型保存的每个属性都可以的情况下,或者仅在使用该域模型来显示事物而不是将事物保存回数据存储?