expressjs req和res对象参数关于安全

时间:2013-04-18 07:12:53

标签: node.js express

我用express写一个app,我想在global中实现一个变量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,当我调试时,我发现可以从req获取user.hashed_pa​​ssword。我认为它不安全。 浏览器端的用户可以获取此信息吗?

1 个答案:

答案 0 :(得分:0)

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

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

无论如何,无论浏览器是否能够访问它,您的问题都会消失。