【问题标题】:Can MVC.NET prevent SQL-injection at razor or controller level?MVC.NET 可以防止剃刀或控制器级别的 SQL 注入吗?
【发布时间】:2015-06-08 05:47:15
【问题描述】:

MVC.Net 是否有任何系统可以防止 SQL 注入攻击,或者我应该在我的代码中手动检查它?

【问题讨论】:

  • SQL 注入通常在应用的 ORM 层处理。大多数现代 ORM 提供针对 SQL 注入的默认保护(通常通过参数化查询或存储过程)。如果可能,您不应该尝试推出自己的查询文本搜索解决方案;它充满了边缘情况。
  • 我有自己的ORM。我的问题是,我应该在我的ORMMVC 上检查注入本身是否有一些系统,例如在razorcontroller 级别上进行验证以防止注入?
  • 下面的查询和这个很相似,stackoverflow.com/questions/9079400/…
  • 我不相信 MVC 对 SQL 注入保护有任何本机支持(它不应该因为它远远超出 MVC 的预期范围)。 MVC 确实具有脚本注入保护机制,但这是一个单独的问题。您的 ORM 是否通过连接从网页回发或查询字符串获得的字符串值来创建 SQL 语句?
  • 我认为Sql Injection 可以在视图级别进行验证。所以可能是MVC.Net,它为输入创建了一些验证,也有类似注射验证的东西。在我的ORM 中,主要方法与SP 一起使用,但其中一些方法会创建字符串查询。

标签: sql asp.net-mvc security


【解决方案1】:

这与前端无关,防止这种情况取决于您使用的语言和数据库连接的功能。

通常您只需使用存储过程来规避注入攻击

有关示例,请参阅 here

【讨论】:

  • 我有自己的ORM。我的问题是,我应该在我的ORMMVC 上检查注入本身是否有一些系统,例如在razorcontroller 级别上进行验证以防止注入?我使用C#Razor
  • @SiamakFerdos 您应该在问题中说明这一点,因为这会产生影响并影响人们的回答。也许在你的帖子中问两个问题(mvc 是否提供这样的功能/razor 是否提供这样的功能)或者问一个新的问题,重点是 razor 也是一个好主意。也许这很有趣:troyhunt.com/2012/12/stored-procedures-and-orms-wont-save.html
【解决方案2】:

有 MVC.Net 任何系统来防止 SQL 注入攻击

不,因为这超出了“MVC”的范围。

MVC 处理前端,而 SQL 注入攻击发生在后端。 MVC 不知道您是如何直接保存数据的,例如 Entity-Framework、nHibernate、ADO 或您自己的 ORM。

我应该签入我自己的代码

从 cmets 看来,这似乎意味着:我应该检查自己的 ORM。

是的。总是。无论您使用什么作为前端,您自​​己的 ORM 都应该检查(或者,更具体地说,不允许设计)SQL 注入攻击。

这就引出了一个问题:

MVC 可以检查这个

是的 - 您可以编写自定义 validator attribute 以应用于您的 poco 属性以检查一些潜在的 SQL 注入攻击。

我之前说过,“设计不允许”,因为您无法 100% 检查所有可能的当前和未来所有数据库引擎的 SQL 注入方法你的 ORM 句柄。

您还需要考虑到每个数据库引擎(Oracle、TSQL、nosql)的“攻击”会有所不同,因此任何 UI 检查都需要了解当前使用的数据库引擎。

【讨论】:

    【解决方案3】:

    有 MVC.Net 任何系统来防止 SQL 注入攻击吗?

    不,它没有。 MVC 完全不知道 SQL 服务器。这不是它的职责范围。

    我应该在我的代码中手动检查它吗?

    没有。绝对不。如果您依靠字符串检查来查看用户的输入是否旨在创建 SQL 注入,那么您将弄错。即使您最终做对了(此时您的验证代码可能会变得非常冗长和复杂),所有这些努力都将是徒劳的,因为您从一开始就不需要这样做。

    您应该做的是始终在查询中使用参数,并且永远不要通过字符串连接构造 SQL 语句。如果您使用的是健全的 ORM 框架,它会为您做到这一点。

    无论是否使用 ASP.NET MVC,此建议都不会改变。

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 2012-07-30
      • 2013-02-25
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多