Meteor方法中的安全性 - 我应该将对象或只是id传递给服务器吗?

时间:2015-09-15 07:15:33

标签: meteor

在我的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魔法可以用来验证服务器上对象的所有权,状态等更容易,(半)自动?

1 个答案:

答案 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; }

状态将是特定于应用程序的,不要指望任何预先构建的魔法。