我们正在开发一个MVC 5应用程序,当我们使用 Veracode 运行安全扫描时,我们得到了以下缺陷说
“动态确定的对象属性的不正确控制修改”
并添加了this个链接作为修复的参考。
尝试使用HTTP Post向我的控制器功能实施绑定属性,问题已修复。
所以在 ASP.NET MVC 中,是否必须为所有帖子使用绑定属性以避免安全违规?
或者我可以忽略这个缺陷或任何其他替代方式,我可以解决这个问题,因为硬编码和维护绑定属性在实时应用程序中确实很难。
请分享您的观点。
答案 0 :(得分:2)
不一定要使用Bind属性。
您发布的链接基本上是他们想出的最脏的例子。他们直接将EF模型绑定到控制器中,没有真正的应用程序可以做到这一点我讨厌Miscrosoft,他们通过应用最肮脏的最糟糕的练习模式向您展示如何轻松地从数据库到Web,而不解释这不是您的事情我想在现实生活中做。
在现实生活中,您将创建一个适合您的视图的(视图)模型。这意味着该类只具有您希望从请求中接受的属性,因此在大多数情况下您不需要Bind属性。
EF模型是数据层中的低级别类,不应绑定到任何控制器IMO。
更新: 实际上,在链接的顶部,他们发布了这个:
注意实现存储库模式是一种常见做法 为了在你的控制器和控制器之间创建一个抽象层 数据访问层。保持这些教程的简单性和重点 教学如何使用实体框架本身,他们不使用 库。有关如何实现存储库的信息,请参阅 ASP.NET数据访问内容映射。
然而,这只是讨论存储库模式,这是一个抽象数据层的好模式,但存储库模式将返回的DTO仍然太低,无法绑定到View。
您应该创建一个根据您的视图量身定制的模型,在控制器或服务层中,您可以在不同层之间进行基础架构映射。