我对以下结构的安全性反馈感到有点好奇:
流星服务器端应用程序(当然使用Mongo) Meteor Mobile App,据我所知这有迷你Mongo
从我读过的教程中,本地mini-Mongo保存了移动应用程序所需的数据,而当有网络连接时,调用与服务器上的父mongo同步。
我是否有责任在代码级别限制在客户端mini-Mongo中保存的内容?例子:
答案 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方法进行任何突变。