2

我目前正在开发一个需要用户和管理员的应用程序。我现在要做的是,我在客户端上创建了一个管理员帐户,用户名是“admin”,默认密码应该在帐户-ui 上更改。

我这样做是因为创建这样的用户:

Accounts.createUser({
    username    : 'admin',
    email       : 'test@test.com',
    password    : 'changethispasswordovertheuserinterface',
    profile     : { type : 'admin' }
});

在服务器端对我不起作用。这意味着我只需在我的 client.js 中创建管理员并使用此代码检查管理员是否已登录。

Template.admin.isAdmin = function () {
    var currentUser = Meteor.user();
    // Is this hackable?
    if (null !== currentUser) {
        if ('admin' === currentUser.username) {
            return true;
        }
    }
};

这是解决这个问题的最佳方法吗?最重要的是,我的网站可以像这样被黑客入侵吗(有人可以伪造它吗)?

4

2 回答 2

3

是的,这是可破解的,可以拉起 chrome 检查器并很容易地对其进行修改。甚至更快,通过Template.admin.isAdmin = function () { return true; }在 Chrome 的网络控制台中输入类似的内容

如果用户是管理员,最好的方法是仅从服务器端向客户端提供信息。因此,如果从客户端执行操作,这将意味着使用Meteor.allow以确保只能由管理用户更改数据库。

这也取决于您想使用“isAdmin”做什么。如果它的内容,您可以在服务器端生成 html 并将其以Meteor.methods. 目前,模板系统不提供根据用户文档包含的内容锁定客户端上的 UI。

对于任何管理命令,您都可以使用 aMeteor.call在服务器上审查用户并在那里执行事务。

于 2013-02-04T13:44:54.460 回答
-2

该线程上的答案也有效,并且投票最多的答案具有服务器端 Meteor 方法调用的代码。

于 2014-08-03T14:01:19.693 回答