使Meteor.methods在控制台中受到高级用户的保护

时间:2016-09-05 20:35:50

标签: security meteor methods console

假设您在Meteor中有一个方法来删除文档:

Meteor.methods({

  discard_meeting({ meeting_id }) {
    Meetings.remove({ _id: meeting_id });
  },

});

如果用户在控制台上调用此方法,他们应该能够删除此元素(如果他知道_id,可能会查看html ...:)

如果应用在服务器上有一个添加到每个方法的secret_key,以防止“高级用户”弄乱数据,该怎么办?

像:

import { METHOD_TOKEN } from '/server/tokens.js';

Meteor.methods({

  discard_meeting({ token, meeting_id }) {
    if (token === METHOD_TOKEN) {
      Meetings.remove({ _id: meeting_id });
    }
  },

});

你认为这可能是一个好主意吗?

感谢。

1 个答案:

答案 0 :(得分:0)

但是再一次有人仍然可以通过强力搜索找到你的令牌来访问你的方法。正确的方法是在您的方法中检查您的用户是否已登录并有权删除会议。类似的东西:

    meeting = Mettings.find({meetingId});

    if (this.userId != meeting.creator) {
      throw new Meteor.Error('unauthorized', 'You are not allowed to delete the meeting!');
    }

此外,您应该验证传递给方法的数据。一种简单的方法是使用Validated Methods。查看Meteor Guide以更好地了解如何编写正确的方法定义。