2017-05-29 62 views
0

我使用这个包的用户会话记录:https://www.npmjs.com/package/client-sessions如何安全地确定用户在使用客户会话

登录进行得很顺利,但我不知道如果我检查我的用户已正确且安全地登录。我相信这些会话是加密的,但似乎只是检查if(req.session && req.session.user)是不够安全的。这是检查用户是否登录的正确方法吗?要清楚的是,用户在我指示的30分钟后登录并退出,但我不是一个黑客,我不希望人们只是修改他们的cookie来进入其他用户的账户。

var session = require('client-sessions'); 

app.use(session({ 
    cookieName: 'session', 
    secret: config.secret, 
    duration: 30 * 60 * 1000, 
    activeDuration: 5 * 60 * 1000 
})); 

router.get('/', function(req, res, next) { 
if(req.session && req.session.user) 
    return res.redirect('amazingpage'); 
else 
    res.render('index'); 
}); 

回答

0

就像你说的只是检查用户提供的数据是不安全的用于这一目的。

服务器通常会在会话中保存这样的信息,并通过SSL隧道发送带有唯一(随机)ID的Session Cookie。如果用户提供不同的ID,则极有可能不存在,因此不会造成任何伤害。 SSL通道在这里非常重要,所以“中间人”无法读取该ID并将该会话声明为自己的会话。见Session Hijacking

如果您不想在服务器上存储比绝对需要更多的信息,也可以使用仅由服务器已知的密钥加密此数据,并将密码存储在客户端上,就像完成以防止SYN泛滥一样。见SYN cookies。请务必使用密码模式,以防止用户在采取此方法时修改cookie。 (通常使用CBC