【问题标题】:Nodejs Expressjs session ip and browser agent matchNodejs Expressjs 会话 ip 和浏览器代理匹配
【发布时间】:2012-05-25 14:10:46
【问题描述】:

我正在使用 connect-mysql-session 将会话存储在数据库中。现在我的问题是如何添加包含浏览器代理和 IP 地址的用户数据来检查会话是否有效?我如何获得这些信息?我如何检查它是否匹配?

    users.login(credentials,function(err, results) {

  //On errors
  if (err) {
    res.render(routes.index, {
      title: 'Login'
    });

  //On success
  } else if (results[0]) {
    //Set session data and redirect to start page
    req.session.userdata = results[0];
    req.session.userdata.email = req.body.email_login;
    req.session.is_logged_in = true;
    res.redirect('/start');

  //Wrong credentials
  } else {
    req.flash('warning','Wrong password or login');
    res.render('index', {
      title: 'Login'
    });
  }
});

更新:

我现在将这个添加到会话中:

req.session.ip = req.connection.remoteAddress;
req.session.useragent = req.headers['user-agent'];

并在我的身份验证中间件中检查它:

  if(req.session.userdata && req.session.is_logged_in === true && req.session.ip === req.connection.remoteAddress && req.session.useragent === req.headers['user-agent']) {
    next();
  } else {
    res.redirect('/');
  }

这是安全的还是您认为这样做有任何风险?我应该换一种方式吗?

【问题讨论】:

    标签: mysql node.js express


    【解决方案1】:

    你的实现看起来不错,并且会给你一些 - 非常 - 防止会话劫持的基本保护。

    但是,我不确定我是否了解您的中间件。是什么阻止了用户直接请求/start?而且,更重要的是,当中间件拦截所有请求时,即使是针对/start 的请求,这看起来不是无限重定向循环吗?

    我的建议只是在 ip 或用户代理不匹配时考虑用户始终退出。

    【讨论】:

    • 你对无限循环是正确的。我编辑了代码,粘贴问题。您对提高劫持安全性有何建议。正如你所说,这是非常基本的,但我真的不知道我还需要保护什么?任何提示或提示表示赞赏。谢谢
    • 页面是通过https传输的。
    • 对于通过 HTTPS 传输的页面,您绝对可以放心,并且您有强大的保护措施来防止这种情况发生。这绝对是缺失的信息。我要提出的唯一额外建议是在会话 cookie 中设置 secure 标志,因此它只能通过 HTTPS 连接传输。这将防止用户错误地请求非安全页面以明文公开会话 cookie。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多