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

jef*_*lte 12 javascript meteor

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

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

<template name="admin">
{{#if currentUser}}
{{loginButtons}}
  {{#if isUserAdmin}}
     show some stuff here...
  {{/if}}
{{ else }}
{{loginButtons}}
{{/if}}
</template>
Run Code Online (Sandbox Code Playgroud)

然后在我的帮助下,我有:

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.
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Hub*_* OG 20

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

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

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

2)如果您有一些不应该对所有用户可见的数据,但仅限于管理员(例如您的用户电子邮件,产品的价格历史,未发布的文章等),请务必检查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;
});
Run Code Online (Sandbox Code Playgroud)

同样,重要的是数据被过滤,publish因为subscribe呼叫很容易被篡改.

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

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