2014-01-13 78 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);