0

我对以下结构的安全性反馈有点好奇:

Meteor 服务器端应用程序(当然使用 Mongo) Meteor Mobile App,我知道这有一个迷你 Mongo

从我阅读的教程中,本地 mini-Mongo 保存移动应用程序所需的数据,而与服务器上的父 mongo 同步的调用发生在有网络连接时。

我是否有责任在代码级别限制保存在客户端 mini-Mongo 中的内容?例子:

  • 团队管理员可以添加/编辑/创建用户。这是否意味着它将与他的设备同步?如果用户更改他的密码,它会同步到团队管理员的设备吗?我知道它的散列,但这不是重点
  • 发布/订阅可以让我将其他页面限制为我的数据或我的团队数据,这样似乎有帮助
  • 假设我不发布/订阅数据不会保存在客户端的迷你 Mongo 中,是否安全?

这可能有答案:如何创建仅用于服务器安全敏感信息的流星主题(客户端无法订阅)?

4

1 回答 1

3

MiniMongo 基本上存储它通过DDP(Meteor 的数据协议)从某些消息中获取的数据。通常情况下,数据不会在本地缓存,而是在每次页面重新加载时重新创建,假设我们谈论的是在 WebView 中呈现的混合移动应用程序。

您可以查看使用Meteor DevTools for Chrome传递的消息。

这些消息 ( added/ changed/ removed) 通常通过pub/sub系统发送。您确实有责任决定发送什么。由于发布是由服务器上的函数调用启动的,因此您可以完全控制系统中的建模角色和权限,以及谁获得发布中的内容。

一个常见的模式是:

Meteor.publish('someProtectedPblication', function(/*...*/) {
  if (this.userId && someCondition(this.userId) { // check for permission
    return SomeCollection.find(someData, someFields); // return a cursor that gets synced with the user
  }
  return this.ready(); // the user is not authorized to view the data
});

管理员创建用户时,我假设这是通过 Meteor 方法调用完成的,即RPC。除非您明确将其发布给他(我没有看到永远这样做的理由)。

我发现在客户端使用客户端 MiniMongo 突变 ( insert/ update/ delete) 没有太大价值,除了乐观的 UI 渲染,因为我认为使用allow/deny不安全且更容易出错的规则来保护它,并且我使用 Meteor 方法来处理任何突变。

于 2018-04-27T12:33:54.390 回答