MVC 安全违规 - 对动态确定的对象属性的不当控制修改

Posted

技术标签:

【中文标题】MVC 安全违规 - 对动态确定的对象属性的不当控制修改【英文标题】:MVC Security Violation - Improperly Controlled Modification of Dynamically-Determined Object Attributes 【发布时间】:2015-05-23 18:12:45 【问题描述】:

我们正在开发一个 MVC 5 应用程序,当我们使用 Veracode 运行安全扫描时,我们遇到了以下缺陷:

“对动态确定的对象属性的不当控制修改”

并添加this链接作为修复参考。

尝试使用 HTTP Post 将 Bind Attribute 实现到我的控制器函数,问题已解决。

那么在 ASP.NET MVC 中是否必须对所有 Post 使用 Bind Attribute 以避免安全违规?

或者我可以忽略这个缺陷或任何其他我可以解决这个问题的替代方法,因为硬编码和维护绑定属性在实时应用程序中确实变得很困难。

请分享你的观点。

【问题讨论】:

嗨@Tharun。我在我们的 Veracode 扫描中发现了同样的问题。您是否应用了 Bind 属性来修复扫描或执行其他缓解措施? 我们在少数地方通过数据绑定修复了它,但最终可以与 veracode 交谈以查看究竟是什么问题 Dam...我希望有办法使用 Bind。这似乎有点矫枉过正:(谢谢你回复我:) 【参考方案1】:

不强制使用 Bind 属性。

您发布的链接基本上是他们能想出的最肮脏的例子。他们直接将 EF 模型绑定到控制器中,这是现实世界中的应用程序无法做到的,我讨厌 Miscrosoft,他们向您展示了通过应用最肮脏的最差实践模式从 DB 到 Web 是多么容易,而没有解释这不是您要做的会想在现实生活中做。

在现实生活中,您将创建一个为您的视图量身定制的(视图)模型。这意味着该类将仅具有您希望从请求中接受的属性,因此在大多数情况下您实际上并不需要 Bind 属性。

EF 模型是数据层中的低级类,不应绑定到任何 IMO 控制器。

更新: 实际上,他们在链接的顶部发布了以下内容:

注意在 为了在你的控制器和控制器之间创建一个抽象层 数据访问层。为了使这些教程简单并专注于 教如何使用实体框架本身,他们不使用 存储库。有关如何实现存储库的信息,请参阅 ASP.NET 数据访问内容映射。

不过,这只是在谈论存储库模式,这是一个很好的抽象数据层的模式,但是存储库模式将返回的 DTO 仍然太低级,无法绑定到视图。

您应该创建一个适合您的视图的模型,并且在您的控制器或服务层中,您可以在不同层之间进行基础架构映射。

【讨论】:

以上是关于MVC 安全违规 - 对动态确定的对象属性的不当控制修改的主要内容,如果未能解决你的问题,请参考以下文章

1月第1周业务风控关注| 国家网信办启动专项行动 剑指12类违法违规互联网信息

风控安全“爬虫技术”惹争议

如何使用动态对象类创建 .net 核心 MVC 模型?

KVO使用不当导致的崩溃

Objective-C中的原子属性与线程安全

MVC3:创建视图同时在对象和属性对象中填充数据