0

我用express写了一个应用程序,我想在全局中实现一个变量current_user,以确保用户是否登录。所以,我添加了一个中间件

app.use(require('./controller/user').auth_user);

在 user.js 中,我定义了一个名为 auth_user 的方法,使用 res.locals 设置一个全局本地 current_user。并设置 req.session.user=user。

exports.auth_user = function(req, res, next) {
  if (req.session.user) {
    res.locals('current_user', req.session.user);
    return next();
  } else {
  var cookie = req.cookies['user_cookie'];
  if (!cookie){
    res.locals('current_user', "");
    return next();
  };
  var auth_token = decrypt(cookie, 'user_session');
  var auth = auth_token.split('\t');
  var user_email=auth[3].toLowerCase();
  User.findOne({'email': user_email},function(err, result) {
    if(err) return next(err);
    if (result) {
      req.session.user = result;
      res.locals('current_user', req.session.user);
      return next();
    }else{
      return next();
    }
  });
  }
};

所以,我给req放了一个user对象,调试的时候发现可以从req获取user.hashed_pa​​ssword。我觉得不安全。浏览器端的用户可以获取此信息吗?

4

1 回答 1

0

只要您不将信息暴露在其他任何地方,这是安全的。至少从浏览器无法访问req对象的角度来看。

req无论如何,另一个问题是如果您只需要它的某些特定部分,将完整的用户对象附加到对象是否是最好的主意。为什么不附加一个不包含散列的对象的精简版本?

那么不管浏览器是否能够访问它,你的问题无论如何都消失了。

于 2013-04-18T07:18:54.183 回答