我应该在"两者中声明我的收藏品。文件夹?

时间:2015-06-05 17:34:57

标签: javascript meteor

我想确认一下:

如果我在both文件夹中声明我的收藏集,并在allow文件夹中声明我的denyserver规则,那么它是否意味着,只要它符合allowdeny规则,用户可以使用控制台更改集合吗?

那么这是否意味着从安全的角度来看,我的出版物和服务器方法(为了强制执行数据的机密性而进行了微调)是没用的? (即用户仍然可以通过控制台直接访问集合来绕过它们)

如果我没错,你会建议我做什么? >

  • 仅声明我可以在both文件夹中完整披露的集合。在server文件夹中声明其余内容,仅提供发布+方法。
  • 将我的收藏方法转换为允许/拒绝规则。那么我该如何过滤collection.find()查询(以前是我的出版物)?

2 个答案:

答案 0 :(得分:2)

  1. 该集合应在both文件夹中声明,以便您可以在客户端和服务器端使用它。
  2. 是的,用户只要符合allowdeny规则,就可以使用浏览器控制台为您的收藏集编写(插入/更新/删除)。
  3. 我强烈建议您放弃allow / deny规则方法并使用Meteor.methodsMeteor.call代替您可以获得更好的控制权,例如验证等。过滤可用的数据客户端,使用Meteor.publish

答案 1 :(得分:1)

是和否。只要它与允许/拒绝规则匹配,客户端就可以通过_id字段和_id字段更新文档。您的服务器出版物仍然可以控制客户端有权访问哪些文档(通过浏览器控制台或代码)。但是,如果未设置适当的允许/拒绝规则,客户端仍可能通过_id更新文档(如果它以某种方式获得对_id的访问权限)或将新文档插入集合中。

听起来你已经大部分时间做对了 - 你的Meteor.methods和出版物仍然有用。您(希望)通过发布设置您的客户端读取权限,并通过Meteor.methods设置客户端写入权限。

从这里开始有几种方法:

  1. 如果您希望从客户端代码插入/更新能力,请相应地设置允许/拒绝规则。这样做有一些优点 - 客户端插入和更新本质上是一个在客户端和服务器上运行的Meteor.method,因此客户端可以看到近乎即时的更新,然后服务器将检查确认没关系。如果不是,没有任何伤害 - 服务器说"不允许"并且更新也在客户端上回滚。

  2. 在Meteor.methods中执行所有插入和更新,并告诉Meteor拒绝所有更新和插入集合。这意味着客户端无需调用Meteor.method即可插入或更新,您可以在方法中构建安全性。

  3. 这篇文章可能解释得更好一点: https://www.discovermeteor.com/blog/meteor-methods-client-side-operations/