如果我没有保护后端,会有哪些安全漏洞(Meteor官方教程)?

时间:2017-05-25 08:37:49

标签: meteor

我参考流星官方教程:https://www.meteor.com/tutorials/blaze/publish-and-subscribe

此代码(在前端)是添加一个私人按钮。该按钮仅出现在用户自己的任务旁边以及该用户登录时:

{{#if isOwner}}
  <button class="toggle-private">
    {{#if private}}
      Private
    {{else}}
      Public
    {{/if}}
  <button>
{{/if}}

isOwner定义为:

Template.task.helpers({
  isOwner() {
    return this.owner === Meteor.userId();
  }
});

这是将任务设置为私有(在后端)的方法:

'tasks.setPrivate' (taskId, setToPrivate) {
  check(taskId, String);
  check(setToPrivate, Boolean);

  if (task.owner !== Meteor.userId()) {
    throw new Meteor.Error('Not authorised');
  }

  Tasks.update(taskId, { $set: { private: setToPrivate }});
}

我理解包含:

if (task.owner !== Meteor.userId()) {
    throw new Meteor.Error('Not authorised');
}

将创建额外的保护层。它可以是不必要的,因为如果当前用户不是任务的所有者,前端将不会显示私人按钮。我很好奇 - 如果我没有在后端包含上述代码,会有哪些安全漏洞?攻击者如何利用此漏洞?

1 个答案:

答案 0 :(得分:1)

基本上你永远不会相信前端。任何人都可以在执行时编辑它。只需要在执行时将你的任务助手isOwner更改为return this.owner === true;,然后他就会被视为所有者。

Meteor guide中有一篇关于安全性的好文章,从:

开始
  

保护Web应用程序的关键在于了解安全域并了解这些域之间的攻击面。在Meteor应用程序中,事情非常简单:

     

可以信任在服务器上运行的代码。

     

其他一切:在客户端上运行的代码,通过Method和发布参数发送的数据等都不可信任。

服务器是您应用中唯一受信任的部分,因此您应始终检查服务器。客户端检查主要是为了获得更好的用户体验。