我是否需要在Express中间件中验证会话数据?

时间:2013-06-29 20:31:30

标签: node.js session express middleware

目前,我的Express 3.0应用程序的身份验证中间件看起来像这样:

return function (req, res, next) {
    if (!isProtected(req.path)) {
        debug('Allowed path "' + req.path + '" -->  calling next()');
        next();
    } else if (req.session.user != undefined) {
        debug('User session detected --> calling next()');
        next();
    } else if (req.cookies.user != undefined && req.cookies.pass != undefined) {
        var username = req.cookies.user;
        var hash = req.cookies.pass;

        debug('Cookies detected, authorizing...');
        dbman.auth(username, hash, function (err, record) {
            if (err) debug('Authorization error --> ' + err);
            else if (!record) res.redirect(redirectPath);
            else {
                debug('Autologin successful, storing session data');
                req.session.user = record;
                next();
            }
        });
    } else {
        debug('Protected path -- No valid session or cookies were detected');
        debug('redirecting to "' + redirectPath + '"');
        res.redirect(redirectPath);
    }
};

我的工作假设用户永远不会自己设置req.session,并且req.session.user只会在成功验证后设置。因此,如果会话存储中存在用户记录,我会让请求通过,甚至无需验证记录中存在的用户详细信息。但是当有cookie时,我会验证cookie中存在的哈希值。我是否需要验证会话记录,以免用户以某种方式操纵会话?

1 个答案:

答案 0 :(得分:0)

Session只是你的内部数据结构 - 所以不,除非你提供会话操作的逻辑,否则用户无法做到这一点。 Express所做的是将加密的会话ID存储在用户cookie中,然后转换为存储在服务器上的会话对象。如果他知道加密密钥,用户只能操作会话对象ID - 他没有。