能够在Meteor中更新前端的集合

时间:2015-08-12 11:30:15

标签: meteor

我很难理解编辑前端可用的任何集合的能力,以及如何防止它 - 如果这是一个功能仅适用于蒙古语。

蒙古国:

  

...因为Mongol是一个debugOnly包,它不会编译为生产代码。

哪个好,但是作为我对Meteor的新手,我不确定Mongol在这种情况下是否只是一个界面,或者update的能力是否始终可用于前端(蒙古只是让它更容易)。

我的情况是我有一个表单提交页面,它抓取关联的Meteor.user的个人资料,以显示他们的名字和表单:

HTML

<template name="form">
  <h2>Submission for: {{ user.profile.name }}</h2>
  <form id="brief">
    …
  </form>
</template>

路线

Router.route('/form/:_id', {

  loadingTemplate: 'loading',

  waitOn: function () {
    return Meteor.subscribe('forms', this.params._id);
  },

  action: function () {
    this.render('form', {
      data: {
        _id: this.params._id,
        form: function() {
          return Forms.findOne({});
        },
        user: function() {
          return Meteor.users.findOne({});
        }
      }
    });
  }

});

公开

Meteor.publishComposite('forms', function(formId) {
  return {
    find: function() {
      return Forms.find({_id: formId});
    },
    children: [
      {
        find: function(form) {
          return Meteor.users.find({_id: form.userId}, {fields: {profile:1}});
        }
      }
    ]
  };
});

这非常有效 - 但是使用Mongol控制台我可以updateduplicateremove用户。当然,在生产环境中,我不希望这是可能的 - 这是因为Mongol在那里,或者如果没有Mongol,一个坚定的用户可以达到同样的目的吗?

如果他们可以,我该如何预防/使用它?

修改:此处还详细阐述了:https://github.com/msavin/Mongol/blob/master/documentation/SECURITY.md

鉴于他们如何参考特殊方法&#39;我假设这是允许这种情况发生的原因,并且直接更新字段的能力通常不会用于前端。如果有人能够确认那将是王牌!

2 个答案:

答案 0 :(得分:2)

是的,Mongol使用后门解决方案(仅在调试/ dev中)来访问和更改数据库中的mongo文档。这意味着它不会包含在您的生产代码中。对于数据库上的客户端操作,Meteor限制更新,删除和插入服务器,尽管您可以使用Meteor的允许/拒绝规则来允许客户端更新数据库集合。但是,允许/拒绝规则需要非常严格,以确保客户端无法更改他们无法更改的数据。出于这个原因,大多数人坚持使用客户端可以初始化的meteor.methods触发的服务器端DB更改。

答案 1 :(得分:1)

由于它是一个debugOnly包,只要你不以“调试模式”部署到生产环境,它就是安全的。