我很难理解编辑前端可用的任何集合的能力,以及如何防止它 - 如果这是一个功能仅适用于蒙古语。
蒙古国:
...因为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控制台我可以update
,duplicate
和remove
用户。当然,在生产环境中,我不希望这是可能的 - 这是因为Mongol在那里,或者如果没有Mongol,一个坚定的用户可以达到同样的目的吗?
如果他们可以,我该如何预防/使用它?
修改:此处还详细阐述了:https://github.com/msavin/Mongol/blob/master/documentation/SECURITY.md
鉴于他们如何参考特殊方法&#39;我假设这是允许这种情况发生的原因,并且直接更新字段的能力通常不会用于前端。如果有人能够确认那将是王牌!
答案 0 :(得分:2)
是的,Mongol使用后门解决方案(仅在调试/ dev中)来访问和更改数据库中的mongo文档。这意味着它不会包含在您的生产代码中。对于数据库上的客户端操作,Meteor限制更新,删除和插入服务器,尽管您可以使用Meteor的允许/拒绝规则来允许客户端更新数据库集合。但是,允许/拒绝规则需要非常严格,以确保客户端无法更改他们无法更改的数据。出于这个原因,大多数人坚持使用客户端可以初始化的meteor.methods触发的服务器端DB更改。
答案 1 :(得分:1)
由于它是一个debugOnly包,只要你不以“调试模式”部署到生产环境,它就是安全的。