javascript - Meteor 是否有关于ACL的mongo注入问题?

  显示原文与译文双语对照的内容

Meteor 文档 http://docs.meteor.com/#dataandsecurity 在"输入验证"下面说:

Meteor 允许你的方法和发布函数以任何JSON类型的参数。 实际上 Meteor 协议支持EJSON扩展 JSON JSON扩展支持其他常见类型。它支持other和binary类型,这意味着客户端传递给方法和发布函数的类型类型是你期望的类型,但它是你希望的类型。

Meteor 提供了一个轻量级库,用于检查参数和它的他值是否为你预期的类型。 简单地启动函数,比如检查( 用户名,字符串) 或者检查( Office,{building: ) 字符串,房间:Number} ) 如果它的参数是意外类型,则检查调用将引发错误。

Meteor 还提供了一种简单的方法来确保所有方法和发布函数都验证了它们的所有参数。 只要运行 Meteor 添加audit-argument-checks和任何方法或者发布函数跳过检查它的任何参数都会失败,异常会。

在安全讨论中,mongo注入问题得到了更详细的解释: https://www.meteor.com/blog/2013/08/02/meteor-devshop-6-devshop-live-security-meteor-ui

所以我的问题是:

  1. 在调用Mongo或者风险发送不可信的JS对象到数据库之前必须做 check,这样可能会打开一个Mongo注入漏洞? 是,应该在他的应用程序中添加 audit-argument-checks 来保护这个
  2. 这必须在所有mongo操作上完成,而不仅仅是在 find 上? - 不确定
  3. 如果 1 ) 或者 2是 true,那么如何将api的调用转换为使用api来过滤,而不是手工的调用,而是留给客户机使用? 如果需要,可以向允许/拒绝函数添加 check,但在必要时,这取决于 2
时间: 作者:

  1. 是的。如果你盲目信任客户端传递给方法调用的值,可以能会发生各种错误事件。
  2. 这个理论可以能很少有人能给你一个直接答案,所以为什么要风险? 我强烈建议你为你的所有项目添加 audit-argument-checks插件,以便安全。
  3. 对于 allowdenyfind 调用并不存在风险,因为数据已经在客户端( 你的发布函数应该已经发布了正确的文档) 上。 我认为这种情况下的风险与错误数据有关,与安全性相比。 只需将 check 调用添加到规则中就很简单。 例如:


Posts.allow({
 insert: function(userId, doc) {
 check(doc, {
 _id: String,
 message: String,
 createdAt: Date
 });
 return true;
 }
});

如果文档不符合架构,则从客户端插入新帖子将失败。

作者:

在服务器上运行 allowdeny 规则之前,先检查客户端查询。 你可以在客户端和服务器上绝对使用 check inside的允许/拒绝功能。 在客户端上,不为读取编写允许规则,而是在发布函数中使用 check

作者:
...