
编码员征服安全。分享与学习系列 - NoSQL注入
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是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。

Secure Code Warrior 我们在这里为您的组织提供服务,帮助您在整个软件开发生命周期中确保代码安全,并创造一种将网络安全放在首位的文化。无论您是应用安全经理、开发人员、CISO或任何涉及安全的人,我们都可以帮助您的组织减少与不安全代码有关的风险。
预定一个演示Jaap Karan Singh是一位安全编码布道者,首席辛格和Secure Code Warrior 的共同创始人。


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日带着下一篇《编码员征服安全指南》回来。回头见!

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日带着下一篇《编码员征服安全指南》回来。回头见!
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日带着下一篇《编码员征服安全指南》回来。回头见!
资源
Secure Code Warrior corporate overview
Secure Code Warrior is an AI Software Governance platform designed to enable organizations to safely adopt AI-driven development by bridging the gap between development velocity and enterprise security. The platform addresses the "Visibility Gap," where security teams often lack insights into shadow AI coding tools and the origins of production code.
安全代码培训主题和内容
Our industry-leading content is always evolving to fit the ever changing software development landscape with your role in mind. Topics covering everything from AI to XQuery Injection, offered for a variety of roles from Architects and Engineers to Product Managers and QA. Get a sneak peek of what our content catalog has to offer by topic and role.
资源
Observe and Secure the ADLC: A Four-Point Framework for CISOs and Development Teams Using AI
While development teams look to make the most of GenAI’s undeniable benefits, we’d like to propose a four-point foundational framework that will allow security leaders to deploy AI coding tools and agents with a higher, more relevant standard of security best practices. It details exactly what enterprises can do to ensure safe, secure code development right now, and as agentic AI becomes an even bigger factor in the future.






