MeteorJS App安全

时间:2018-04-27 11:56:16

标签: mongodb meteor

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

流星服务器端应用程序(当然使用Mongo) Meteor Mobile App,据我所知这有迷你Mongo

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

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

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

这可能有答案:How do I create a meteor topic that is for server-only security sensitive information (client cannot subscribe)?

1 个答案:

答案 0 :(得分: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 。没有理由将该用户的数据(更不用说他们的哈希密码)提​​供给客户端的管理员,或存储在他的缓存数据库集合中,除非您明确地将其发布给他(我不知道#39; t看到有理由这样做。

除了乐观的UI呈现之外,我在客户端使用客户端MiniMongo变异(insert / update / delete)并没有多大价值,我认为使用allow/deny规则确保安全性较低且更容易出错,我使用Meteor方法进行任何突变。