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