Node.js express.js了解会话安全性

Node.js express.js了解会话安全性,node.js,session,express,Node.js,Session,Express,我无法理解express.js会话如何工作的一些要点 当我做这样的事情时 server.use express.cookieParser() server.use express.cookieSession { secret: 'whatever' } 然后设置登录顺序,如 server.post '/login', (req, res)-> # checks that provided psw and username exist in db req.session.use

我无法理解express.js会话如何工作的一些要点

当我做这样的事情时

server.use express.cookieParser()
server.use express.cookieSession { secret: 'whatever' }
然后设置登录顺序,如

server.post '/login', (req, res)->

  # checks that provided psw and username exist in db

  req.session.user =
    id: dbID
    username: postedUsername
    psw: postedPsw

  res.redirect '/'
req.session.user
在所有参数都未加密的情况下是否安全

我是否应该检查用户名和psw在每一点上是否正确,如下所示:

server.use (req, res, next) ->

  # checks that provided psw and username exist in db
  # otherwise destroy session
?

非常感谢您抽出时间

所有参数未加密时,req.session.user是否安全

当您使用
{secret:'whatever'}
时,您只是对存储在用户浏览器中的cookie进行哈希处理。这比以纯文本形式保存值要好,但并不十分安全(这通常是可以的,因为您不应该在cookie中存储敏感信息)

正如您所注意到的,这些值以纯文本形式从浏览器传输到您的应用程序

如果您需要它们的安全性,那么最好使用HTTPS和证书。不要使用自己的“加密”,而是使用经过验证的协议(如HTTPS/SSL)

我是否应该检查用户名和psw在每一点上是否正确,如下所示:

server.use (req, res, next) ->

  # checks that provided psw and username exist in db
  # otherwise destroy session
通常,您只要求输入一次用户名/密码(在登录过程中),再次在数据库中检查用户名/密码(在登录过程中再次检查),然后发出一个“会话令牌”,用于验证会话是否来自有效用户。会话id是可以cookie的,因为它通常只持续几分钟(取决于您希望cookie值的时间)

验证会话的过程可能需要在每次点击服务器时执行,就像您考虑用户名/密码一样。有些人将会话ID存储在缓存数据库(或内存数据库)中,以便此过程非常快,并且不会减慢用户的速度

您可以在Express中创建“身份验证中间件”:

var authenticate = function(req, res, next) {

  if(req.cookies.sessionToken) {
    // call some method to validate the session)
    validateSession(req, res, next);
  }
  else {
    // Not authenticated (up to you what to do) 
    next();
  }

}
…然后跨您的路由共享此中间件:

app.get('/somethingA', authenticate, somethingA);
app.get('/somethingB', authenticate, somethingB);