MeteorJS应用程序安全



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

流星服务器端应用程序(当然使用Mongo) 流星移动应用程序,我知道这有一个迷你蒙戈

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

在代码级别上,我有责任限制客户端迷你 Mongo 中保存的内容吗?例子:

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

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

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

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

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

常见的模式是:

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)完成的。该用户的数据(更不用说他们的哈希密码)没有理由可供客户端的管理员使用,或存储在他的缓存数据库集合中,除非您明确将其发布给他(我认为没有理由这样做,永远)。

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

最新更新