【问题标题】:Is verifying whether a user is an admin based on req.user secure?基于 req.user 验证用户是否是管理员是否安全?
【发布时间】:2014-08-31 05:24:56
【问题描述】:

我在我的express.js 应用程序中使用了一个简单的中间件功能来验证用户是否具有管理员权限:

function isAdmin (req, res, next) {
    if (req.user.admin)
        return next();
    res.redirect("/");
}

passport 正在用于帐户身份验证。

这是安全的还是可以将req.user.admin 注入到不应具有管理员权限的用户的请求中?我是否应该先找到一个用户,然后检查该用户是否具有管理员权限?例如:

function isAdmin (req, res, next) {
    if (req.user) {
        User.findOne({ "_id" : req.user._id }, function (err, user) {
            if (err) {
                throw err;
            } else if (user.admin) {
                return next();
            } else {
                res.redirect("/");
            }
        })
    } else {
        res.redirect("/");
    }
}

对我来说,这似乎是不必要的复杂。它还会导致更多的数据库访问。这是否有必要验证用户是否真正是管理员或者我的第一个功能是否足够?从本质上讲,谁可以查看或更改req,从而查看或更改req.user

【问题讨论】:

标签: javascript node.js express passport.js


【解决方案1】:

我对护照不是很熟悉,但如果它类似于express-session 的工作方式,req.session 对象存储在(可能加密的)cookie 中,因此如果您以此构建身份验证系统,您可以将用户信息存储在 req.session.user 中,并确信这是安全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2019-10-23
    • 2018-02-02
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多