2017-05-29 63 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