我想确认一下:
如果我在both
文件夹中声明我的收藏集,并在allow
文件夹中声明我的deny
和server
规则,那么它是否意味着,只要它符合allow
和deny
规则,用户可以使用控制台更改集合吗?
那么这是否意味着从安全的角度来看,我的出版物和服务器方法(为了强制执行数据的机密性而进行了微调)是没用的? (即用户仍然可以通过控制台直接访问集合来绕过它们)
如果我没错,你会建议我做什么? >
both
文件夹中完整披露的集合。在server
文件夹中声明其余内容,仅提供发布+方法。collection.find()
查询(以前是我的出版物)?答案 0 :(得分:2)
both
文件夹中声明,以便您可以在客户端和服务器端使用它。allow
和deny
规则,就可以使用浏览器控制台为您的收藏集编写(插入/更新/删除)。allow
/ deny
规则方法并使用Meteor.methods
和Meteor.call
代替您可以获得更好的控制权,例如验证等。过滤可用的数据客户端,使用Meteor.publish
。 答案 1 :(得分:1)
是和否。只要它与允许/拒绝规则匹配,客户端就可以通过_id
字段和_id
字段更新文档。您的服务器出版物仍然可以控制客户端有权访问哪些文档(通过浏览器控制台或代码)。但是,如果未设置适当的允许/拒绝规则,客户端仍可能通过_id
更新文档(如果它以某种方式获得对_id
的访问权限)或将新文档插入集合中。
听起来你已经大部分时间做对了 - 你的Meteor.methods和出版物仍然有用。您(希望)通过发布设置您的客户端读取权限,并通过Meteor.methods设置客户端写入权限。
从这里开始有几种方法:
如果您希望从客户端代码插入/更新能力,请相应地设置允许/拒绝规则。这样做有一些优点 - 客户端插入和更新本质上是一个在客户端和服务器上运行的Meteor.method,因此客户端可以看到近乎即时的更新,然后服务器将检查确认没关系。如果不是,没有任何伤害 - 服务器说"不允许"并且更新也在客户端上回滚。
在Meteor.methods中执行所有插入和更新,并告诉Meteor拒绝所有更新和插入集合。这意味着客户端无需调用Meteor.method即可插入或更新,您可以在方法中构建安全性。
这篇文章可能解释得更好一点: https://www.discovermeteor.com/blog/meteor-methods-client-side-operations/