编码员征服安全。分享与学习系列 - NoSQL注入

发表于2018年12月20日
作者:Jaap Karan Singh
案例研究

编码员征服安全。分享与学习系列 - NoSQL注入

发表于2018年12月20日
作者:Jaap Karan Singh
查看资源
查看资源

NoSQL数据库正变得越来越流行。很难否认它们处理非结构化数据的速度和便利性,尤其是在开发团队按照越来越敏捷的方法论工作的情况下。

开发人员需要时间来解决新兴技术的漏洞和其他挑战。只有当它在生产应用中使用一段时间后,问题才开始浮出水面。

NoSQL数据库也是如此。有一些关键的风险是开发者应该注意的,这样他们才能保证他们的应用安全。其中一个风险是NoSQL注入。

让我们来看看什么是NoSQL注入,它能造成什么损害,以及如何修复它。

了解NoSQL注入

NoSQL注入是由许多相同的注入漏洞引起的,如XML或SQL注入

NoSQL注入允许攻击者在NoSQL查询中放置任意命令。这使他们能够窃取数据,如果他们的权限足够高,甚至可以对数据库进行修改。

当应用程序将用户控制的数据直接放入NoSQL查询表达式时,这些表达式往往采取函数或有内置运算符,可以被操纵来窃取或改变数据。而当这样的事情被恶意执行时,其后果可能是可怕的。

MongoDB数据库是利用这一漏洞的最流行的游戏场所之一。"$ne:""是SQL世界中相当于1=1的运算符,因此,举例来说,攻击者可以将字符"$ne:""'放到用户界面的用户名和密码字段中。如果代码容易受到NoSQL注入的影响,数据库将搜索所有用户名和密码不等于空字符串的记录。换句话说:所有的记录。呀。

如果这个数据库没有加密,那么攻击者可以窃取其中每个用户的用户名和密码。这包括管理员的用户名和密码,给他们一个进入整个数据库的全能通行证。

攻击者经常试图传入总是真实的值。另一个常见的攻击是在设置为函数的属性中注入恶意代码。

例如,MongoDB使用一个查找函数,该函数接收一个带有$where属性的对象。$where属性被设置为一个应该评估为真或假的函数。如果这个函数被用户的输入以任何方式改变,那么一个NoSQL注入很可能就潜伏在那里。

要想详细了解NoSQL注入的复杂性,请查看InfoQ的这篇文章。

知道为什么NoSQL注入是危险的

NoSQL注入之所以危险,主要是因为它还没有得到安全社区应有的审查。

NoSQL注入的影响与传统的SQL注入大致相同。数据可以被窃取或改变,账户可以通过窃取数据而被破坏,而且,也许最恶毒的是,如果成功发出删除命令,数据可能被完全抹去。

底线是MongoDB和其他NoSQL数据库引擎是容易受到攻击的。"
值得庆幸的是,社区中的一些人已经注意到了这一点,并把话说出来。更多的开发者需要教育自己,以便他们能够保护他们的应用程序免受鲜为人知的有害因素的影响,这些有害因素一旦被利用就会变得非常令人头痛。

打败NoSQL注入

NoSQL注入可能很难被打败。不幸的是,没有像SQL注入那样的参数化查询的选择。然而,这并不是不可能的。有几个选项可以帮助你。

  • 摸索器可以作为检测漏洞的一种方法。不过,正如生活中的许多事情一样,最简单的方法可能是最有效的。在这里,良好的旧代码审查是你最强大的盟友。
  • 在审查代码时,寻找用户输入可能设置表达式的值或改变函数的地方。不要让用户的输入来改变你的查询。
  • 请确保将用户输入的内容投到正确的类别中。如果是数字,就投给数字,如果是字符串,就投给字符串,以此类推。
  • 不要在用户输入时使用$where或类似的评价函数。在大多数情况下,你可以通过改变数据模型或模式来解决这个问题。
  • 尝试使用Mongoose作为你的MongoDB驱动。Mongoose允许你为你的NoSQL数据库定义一个模式。如果你告诉Mongoose你的输入是字符串,那么它们将被铸成字符串。因此,攻击者传入的任何对象都不会被当作对象,而是当作字符串。
  • 强化你的数据库!创建低权限的用户账户,最大化查询的执行时间,并始终遵循适用于你的组织的安全最佳实践。

NoSQL数据库易于使用的一个缺点是,开发人员倾向于把它们立起来,开始使用,而不考虑安全问题。

你必须花时间学习如何安全地建立一个NoSQL数据库,并保护自己免受NoSQL注入。

例如,MongoDB企业版对你的文件有先进的访问控制功能。执行 "最小特权 "可以是一个很好的深度防御(DiD)策略,以防有人在你的应用程序中发现漏洞。

总结一下,这是我们所拥有的。

  • 在NoSQL查询表达式中使用你的输入之前,对其进行消毒处理
  • 使用能帮助你的驱动程序,如Mongoose
  • 进行代码审查,特别关注输入数据在查询中的使用方式。
  • 使用模糊器和扫描器,试图帮助发现你的代码中的漏洞。

NoSQL不是No Injections

由于NoSQL数据库的可扩展特性和设置速度,它正在迅速流行起来。该技术的新颖性可能导致开发人员在使用NoSQL数据库时没有考虑到如何保护它们。

NoSQL数据库和SQL数据库一样容易受到注入攻击,所以要谨慎行事,注意查询。如果你想了解更多,请查看我们的学习资源或用我们的免费演示测试你的技能。

提前做好准备,你就不需要担心应用中的NoSQL注入问题。太容易了!

认为你现在已经准备好定位、识别和修复NoSQL注入?进入安全代码领域,勇士。

2018年就这样结束了!这将是我们今年的最后一篇文章,但我们会在2019年1月10日带着下一篇《编码员征服安全指南》回来。回头见!

查看资源
查看资源

作者

Jaap Karan Singh

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

编码员征服安全。分享与学习系列 - NoSQL注入

发表于2018年12月20日
作者:Jaap Karan Singh

NoSQL数据库正变得越来越流行。很难否认它们处理非结构化数据的速度和便利性,尤其是在开发团队按照越来越敏捷的方法论工作的情况下。

开发人员需要时间来解决新兴技术的漏洞和其他挑战。只有当它在生产应用中使用一段时间后,问题才开始浮出水面。

NoSQL数据库也是如此。有一些关键的风险是开发者应该注意的,这样他们才能保证他们的应用安全。其中一个风险是NoSQL注入。

让我们来看看什么是NoSQL注入,它能造成什么损害,以及如何修复它。

了解NoSQL注入

NoSQL注入是由许多相同的注入漏洞引起的,如XML或SQL注入

NoSQL注入允许攻击者在NoSQL查询中放置任意命令。这使他们能够窃取数据,如果他们的权限足够高,甚至可以对数据库进行修改。

当应用程序将用户控制的数据直接放入NoSQL查询表达式时,这些表达式往往采取函数或有内置运算符,可以被操纵来窃取或改变数据。而当这样的事情被恶意执行时,其后果可能是可怕的。

MongoDB数据库是利用这一漏洞的最流行的游戏场所之一。"$ne:""是SQL世界中相当于1=1的运算符,因此,举例来说,攻击者可以将字符"$ne:""'放到用户界面的用户名和密码字段中。如果代码容易受到NoSQL注入的影响,数据库将搜索所有用户名和密码不等于空字符串的记录。换句话说:所有的记录。呀。

如果这个数据库没有加密,那么攻击者可以窃取其中每个用户的用户名和密码。这包括管理员的用户名和密码,给他们一个进入整个数据库的全能通行证。

攻击者经常试图传入总是真实的值。另一个常见的攻击是在设置为函数的属性中注入恶意代码。

例如,MongoDB使用一个查找函数,该函数接收一个带有$where属性的对象。$where属性被设置为一个应该评估为真或假的函数。如果这个函数被用户的输入以任何方式改变,那么一个NoSQL注入很可能就潜伏在那里。

要想详细了解NoSQL注入的复杂性,请查看InfoQ的这篇文章。

知道为什么NoSQL注入是危险的

NoSQL注入之所以危险,主要是因为它还没有得到安全社区应有的审查。

NoSQL注入的影响与传统的SQL注入大致相同。数据可以被窃取或改变,账户可以通过窃取数据而被破坏,而且,也许最恶毒的是,如果成功发出删除命令,数据可能被完全抹去。

底线是MongoDB和其他NoSQL数据库引擎是容易受到攻击的。"
值得庆幸的是,社区中的一些人已经注意到了这一点,并把话说出来。更多的开发者需要教育自己,以便他们能够保护他们的应用程序免受鲜为人知的有害因素的影响,这些有害因素一旦被利用就会变得非常令人头痛。

打败NoSQL注入

NoSQL注入可能很难被打败。不幸的是,没有像SQL注入那样的参数化查询的选择。然而,这并不是不可能的。有几个选项可以帮助你。

  • 摸索器可以作为检测漏洞的一种方法。不过,正如生活中的许多事情一样,最简单的方法可能是最有效的。在这里,良好的旧代码审查是你最强大的盟友。
  • 在审查代码时,寻找用户输入可能设置表达式的值或改变函数的地方。不要让用户的输入来改变你的查询。
  • 请确保将用户输入的内容投到正确的类别中。如果是数字,就投给数字,如果是字符串,就投给字符串,以此类推。
  • 不要在用户输入时使用$where或类似的评价函数。在大多数情况下,你可以通过改变数据模型或模式来解决这个问题。
  • 尝试使用Mongoose作为你的MongoDB驱动。Mongoose允许你为你的NoSQL数据库定义一个模式。如果你告诉Mongoose你的输入是字符串,那么它们将被铸成字符串。因此,攻击者传入的任何对象都不会被当作对象,而是当作字符串。
  • 强化你的数据库!创建低权限的用户账户,最大化查询的执行时间,并始终遵循适用于你的组织的安全最佳实践。

NoSQL数据库易于使用的一个缺点是,开发人员倾向于把它们立起来,开始使用,而不考虑安全问题。

你必须花时间学习如何安全地建立一个NoSQL数据库,并保护自己免受NoSQL注入。

例如,MongoDB企业版对你的文件有先进的访问控制功能。执行 "最小特权 "可以是一个很好的深度防御(DiD)策略,以防有人在你的应用程序中发现漏洞。

总结一下,这是我们所拥有的。

  • 在NoSQL查询表达式中使用你的输入之前,对其进行消毒处理
  • 使用能帮助你的驱动程序,如Mongoose
  • 进行代码审查,特别关注输入数据在查询中的使用方式。
  • 使用模糊器和扫描器,试图帮助发现你的代码中的漏洞。

NoSQL不是No Injections

由于NoSQL数据库的可扩展特性和设置速度,它正在迅速流行起来。该技术的新颖性可能导致开发人员在使用NoSQL数据库时没有考虑到如何保护它们。

NoSQL数据库和SQL数据库一样容易受到注入攻击,所以要谨慎行事,注意查询。如果你想了解更多,请查看我们的学习资源或用我们的免费演示测试你的技能。

提前做好准备,你就不需要担心应用中的NoSQL注入问题。太容易了!

认为你现在已经准备好定位、识别和修复NoSQL注入?进入安全代码领域,勇士。

2018年就这样结束了!这将是我们今年的最后一篇文章,但我们会在2019年1月10日带着下一篇《编码员征服安全指南》回来。回头见!

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。