Node.js express.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
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);