【问题标题】:Control SQL injection in MVC在 MVC 中控制 SQL 注入
【发布时间】:2012-02-23 03:55:48
【问题描述】:

这是我第一次使用 MVC 进行开发,我想让它安全。

当我使用 HtmlEncode 时,它​​会将字符串转换为等效的 HTML 字符串。

用户可以在搜索中输入例如 ali' 或 ali--它们存在于我的数据库中。请问如何控制我的SQL注入搜索和登录?

还有任何防止脚本注入的教程或最佳实践?

【问题讨论】:

  • 您如何访问您的数据库?林克?实体框架?
  • 我用的是普通的,你更喜欢LINQ或者Entity framework
  • 看看这个SO link....两者都会为你检查sql注入....
  • 谢谢关于脚本注入的问题
  • 请通过提及您访问数据库的方式来改进。

标签: asp.net asp.net-mvc sql-injection


【解决方案1】:

LINQ 和实体框架已经为您检查 SQL 注入。

但是无论如何你都应该阅读文档:

LINQ MSDN Link(SQL 注入攻击部分)

实体框架MSDN Link(查询的安全注意事项部分)

希望对你有帮助!

【讨论】:

  • @AMH 我相信这应该是另一个问题,但此链接可能会有所帮助:asp tutorials
  • 你喜欢哪个请LINQ或EF
  • 在我的特殊情况下,我更喜欢 EF,但我不知道您要构建什么...实际上我是在阅读 this 时做出的决定
  • 我有一个包含我的网站的数据库,并将连接、添加、删除它
【解决方案2】:

只要您使用参数化查询或诸如 NHibernate 或实体框架之类的 ORM,您就不必采取任何措施来防止 SQL 注入。参数在实际 SQL 语句之外传递给服务器,作为对服务器的 RPC 调用的一部分。大多数 ORM 出于性能原因使用参数化查询,因此它们不易受到 SQL 注入的攻击。

仅当您通过连接字符串值创建 SQL 语句时,SQL 注入才是可能的。

也就是说,您仍然必须警惕用户输入以防止脚本注入攻击。幸运的是,ASP.NET MVC 已经提供了请求验证机制(请参阅Understanding Request Validation)。

【讨论】:

  • 但我厌倦了通过参数传递值来删除我知道的数据库
  • 无论你传递给参数的是什么(我所说的参数是指一个 DbParameter 派生的对象,如 SqlParameter (msdn.microsoft.com/en-us/library/…),它将作为一个简单的字符串传递给服务器。它永远不会如果您在应用程序的其他部分中使用存储的值通过字符串连接构造 SQL 语句,您仍然会遇到麻烦。
【解决方案3】:

如果您使用 LINQ 来执行数据库查询,它可以为您消除这种 SQL 注入风险。

【讨论】:

  • 谢谢支持ROM数据库,请问脚本注入呢
猜你喜欢
  • 2014-11-06
  • 1970-01-01
  • 2019-04-03
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多