MongoDB注入:转义用户输入,以与$ where运算符一起使用

时间:2018-08-02 19:42:25

标签: node.js mongodb escaping code-injection

我正在研究MongoDB的注入漏洞。当然,罪魁祸首之一是$where运算符。虽然最好的建议当然是避免在任何可能的情况下使用此运算符,但我试图了解如何在实际使用$where的情况下安全地转义用户输入。

一个简单的例子:

db.foo.find({$where: 'this.value === ' + userInput})

MongoDB FAQ提供了有关如何完成此操作的提示:

  

如果需要在$ where子句中传递用户提供的值,则可以使用CodeWScope机制对这些值进行转义。在范围文档中将用户提交的值设置为变量时,可以避免在数据库服务器上对它们进行求值。

但是我一直无法找到有关CodeWScope机制的详细信息,具体是:

  1. 如何在输入转义与$where或其他任何东西一起使用的情况下,特别是与MongoDB的Node驱动程序一起使用这种机制。
  2. 关于其实际功能的描述,即它如何逃避价值和/或减轻注入攻击。

MongoDB Node Driver API Reference记录了一个名为Code的类,该类实际上可能是 the 的“ CodeWScope机制”,但是该引用是稀疏的,没有用法示例,也没有说明实际机制的说明:

  

代码

     

new Code(code, scope)

     

BSON代码类型的类表示。

     

Param code 类型string | function Desc a string or function

     

Param scope 类型Object Desc an optional scope for the function.

诸如BSON Types之类的其他参考文献对此主题几乎一无所获。

我正在寻找有关以下方面的指导和信息:

  • 什么是CodeWScope机制?
  • 如何与Node驱动程序一起使用?
  • MongoDB如何评估CodeWScope包装的值以减轻或防止注入攻击?
  • 是否有比我能发现的更好的使用文档或示例/教程?

0 个答案:

没有答案