在我的Meteor方法中,我将更新存储在集合中的对象,我应该将完整的对象传递给服务器,还是只传递id并获取服务器上的对象?
Meteor.methods({
myMethodOne: function (invitation) {
// do something with invitation, send out email etc.
},
myMethodTwo: function (invId) {
var invitation = Invitations.findOne({_id: invId});
// check state, ownership etc. on invitation
// then, update invitation, send out an email, etc.
}
});
出于安全考虑,我认为myMethodTwo应该是首选,所以我可以检查邀请的所有权等等 - 但是有一些Meteor魔法可以用来验证服务器上对象的所有权,状态等更容易,(半)自动?
答案 0 :(得分:1)
传递ID并获取服务器上的对象 这里的关键安全原则是:
所以check all parameters passed by the client,并尽量减少他们需要通过的内容。不要让他们传递整个对象,你必须确保匹配数据库中的内容,只需要id。这需要较少的输入验证,并且导致较少的边缘情况会增加api的攻击面。
There is 'Meteor Magic' for validating ownership of the object: this.userId。永远不要依赖从客户端传递的userId。
对myMethodTwo func稍作修改可以解决上述问题:
select { vertical-align: top; }
状态将是特定于应用程序的,不要指望任何预先构建的魔法。