我正在研究MongoDB的注入漏洞。当然,罪魁祸首之一是$where
运算符。虽然最好的建议当然是避免在任何可能的情况下使用此运算符,但我试图了解如何在实际使用$where
的情况下安全地转义用户输入。
一个简单的例子:
db.foo.find({$where: 'this.value === ' + userInput})
MongoDB FAQ提供了有关如何完成此操作的提示:
如果需要在$ where子句中传递用户提供的值,则可以使用CodeWScope机制对这些值进行转义。在范围文档中将用户提交的值设置为变量时,可以避免在数据库服务器上对它们进行求值。
但是我一直无法找到有关CodeWScope
机制的详细信息,具体是:
$where
或其他任何东西一起使用的情况下,特别是与MongoDB的Node驱动程序一起使用这种机制。 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之类的其他参考文献对此主题几乎一无所获。
我正在寻找有关以下方面的指导和信息: