我无法理解有关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
非常感谢你的时间
答案 0 :(得分:2)
是req.session.user安全,所有参数都未加密吗?
当您使用{ secret: 'whatever' }
时,您只是对cookie进行哈希处理,因为它存储在用户的浏览器中。这比在纯文本中保存值更好,但它不是非常安全(通常可以,因为你不应该在cookie中存储敏感信息)
您注意到,这些值会以纯文本格式从浏览器传输到您的应用。
如果您需要它们是安全的,最好的办法是使用HTTPS和证书。不要使用自己的“加密”,而是使用经过验证的协议(如HTTPS / SSL)
我应该检查每个点的用户名和psw是否正确如下:
通常,您只需要输入一次用户名/密码(在登录过程中),在数据库中检查一次(再次,在登录过程中),并发出您之后使用的“会话令牌”以验证会话来自有效用户。会话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);