mongodb - 通过 REST API 公开 mongodb 查询是否安全?

标签 mongodb

我正在为查询 MongoDB 数据库的服务构建 REST API。最初,我采用提供“/user/1”的标准路线来搜索用户 id 1 等。随着我对项目的深入了解,其他开发人员开始询问我们是否可以添加 bool 搜索功能,例如能够做到“和”、“非”和“或”。考虑到为此创建 DSL 所需的工作量,我想到让 REST API 接受一个 MongoDB 查询 JSON 对象,就像这样(假设这是通过 POST 传递的):

/query/{"$or": [{"user": "1", "user", "2"}]}

现在,在将该查询传递给 MongoDB 之前,我将执行以下操作:

  1. 验证 JSON 对象
  2. 确保字符串仅用于 query 函数,而不是 updaterunco​​mmandaggregation
  3. 验证查询中没有 $where 子句,since that allows script execution

这样做是否足以防止注入(inject)?阅读 MongoDB FAQ ,似乎将 JSON 传递给查询操作是无害的,因为您不能使用它运行任何 javascript($where 除外)。这是一种安全的方法吗?

最佳答案

正如您已经注意到的,由于 JSON 解析的性质意味着 MongoDB 不会像使用允许 SQL 传递的 API 那样对相同类型的“脚本”注入(inject)攻击开放。

对于您的观点2。常识方法是仅将某些操作作为端点。比如 query 或者 with update 基本上都需要对客户端执行的操作进行认证。因此,您不会向 API 公开具有潜在危险的操作。

还需要考虑一般身份验证和角色。因此,您只允许 API 执行其呈现的“角色”允许的操作。这可以为您提供更多保护,而不必在您的代码中检查这一点,或者至少只是从“未经授权”的操作中捕获错误。

最后将 3. 作为检查提供的查询中是否存在 $where 运算符的可能替代方法(尽管存在限制您可以在每个版本中做得更好),您实际上可以使用 --noscipting 在服务器上关闭它选项。

因此,您确实可以采取很多保护措施来帮助您避免“脚本注入(inject)”攻击,但一般来说,不存在相同类型的危险。

关于mongodb - 通过 REST API 公开 mongodb 查询是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23821655/

相关文章:

json - MongoExport 有效的 JSON 查询构造

mongodb - 计算 MongoDB 中的唯一值

mongodb - 为不存在的数据库创建用户不起作用

xml - 使用凭据的 Spring MongoDB XML 配置失败

javascript - 语法错误: Unexpected token

angularjs - 无法 POST/api Node

node.js - 如何在nodejs中发送更新的值?

ruby-on-rails - 带有rails 4.1的Mongodb错误代码10068或17287并设计

c++ - 使用 C++ 从 MongoDb 检索 binData 记录

mongodb - 在 Meteor.js 中,我如何让两个开发项目使用同一个 Mongo 实例?