2014-01-13 54 views
0

我不明白几点关于如何express.js会议工作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 

您的时间

回答

2

千恩万谢是req.session.user安全的所有参数不加密?

当您使用{ secret: 'whatever' }你只是散列cookie的,因为它是存储在用户的浏览器。这比以纯文本保存值更好,但它并不是非常安全(通常可以,因为您不应该在Cookie中存储敏感信息)

将值从浏览器传输到您的应用程序正如你注意到的那样。

如果你需要他们是安全的,你最好的选择是使用HTTPS和证书。不要推出自己的“加密”,而是使用经过验证协议(如HTTPS/SSL)

,我应该检查,如果用户名和PSW是正确的,在每一个点,像这样:

通常您只需要一次(在登录过程中)询问用户名/密码,在数据库中检查一次(再次,在登录过程中),然后发出一个“会话令牌”,以后使用它来验证会话来自有效的用户。会话ID是可以cookie的,因为它通常只会持续几分钟(取决于您想要cookie的值多长时间)

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

您可以创建一个快递 “认证的中间件”:

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);