简单的用户检查流星,这是安全的吗?

时间:2013-07-25 05:13:27

标签: javascript meteor

我有一个非常简单的应用程序,只需要一个或多个用户就可以登录和使用网站的管理员。

我正在我的管理模板中进行简单的检查,如下所示:

<template name="admin">
{{#if currentUser}}
{{loginButtons}}
  {{#if isUserAdmin}}
     show some stuff here...
  {{/if}}
{{ else }}
{{loginButtons}}
{{/if}}
</template>

然后在我的帮手中我有:

Template.admin.isUserAdmin = function(){
  var adminEmail = Meteor.user().emails[0].address;
  if( adminEmail === "username@gmail.com"){
    return true;
  } else {
    return false;
    //add some logic for displaying error template.
  }
}

这足以让应用程序保持安全,还是我还需要其他东西?

1 个答案:

答案 0 :(得分:20)

这还不够。主要规则是:永远不要相信您的客户。客户端代码的任何部分都可以替换其他任何内容 - 在您的情况下,可以修改isUserAdmin函数以返回始终为真。

为安全起见,您需要在服务器端安装安全过滤器。

1)为只允许管理员修改的数据设置写入/删除权限。见http://docs.meteor.com/#allow

2)如果您有一些不应该对所有用户可见的数据,但仅限于管理员(例如您的用户电子邮件,产品的价格历史记录,未发布的文章等),请务必检查{{}中的权限1}}打电话。例如:

publish

同样,在Meteor.publish('unpublishedArticles', function() { if(!this.userId) return null; var user = Meteor.users.findOne(this.userId); if(user.admin) return Articles.find({published: false}); return null; }); 中过滤数据非常重要,因为publish来电可能很容易被篡改。

3)此外,将您的电子邮件直接嵌入客户端代码中并不明智。使用subscribe字段标记特权用户会更好(并且更容易使用)。

这些步骤应足以确保您的应用安全。