如何避免 Mongo DB NoSQL 盲注(休眠)

How to avoid Mongo DB NoSQL blind (sleep) injection

在扫描我的应用程序漏洞时,我遇到了一个高风险错误,即

Blind MongoDB NoSQL Injection

我已经检查了执行扫描的工具向数据库发送的确切请求,并发现在请求 GET 调用时它已将下面的行添加到 GET 请求。

{"$where":"sleep(181000);return 1;"}

扫描收到“Time Out”响应,表明注入的“Sleep”命令成功。

我需要帮助来修复此漏洞。有人可以帮我从这里出去吗?我只是想了解我需要在我的代码中添加什么才能在连接到数据库之前执行此检查?

谢谢, 安舒

类似于 SQL 注入或任何其他类型的代码注入,不要将不受信任的内容复制到将作为 MongoDB 查询执行的字符串中。

您的应用程序中显然有一些代码天真地接受用户输入或其他一些内容并将其作为 MongoDB 查询运行。

抱歉,很难给出更具体的答案,因为您没有显示该代码,也没有描述您打算用它做什么。

但一般来说,在您使用外部内容的每个地方,您都必须想象如果内容不包含您假设的格式,它会如何被滥用。

您必须改为验证内容,以便它只能采用您想要的格式,否则如果内容格式无效,则拒绝该内容。