2012-05-25 4 views
1

db를 세션에 저장하기 위해 connect-mysql-session을 사용하고 있습니다. 이제 내 질문은 브라우저 에이전트와 ip-adress가 포함 된 사용자 데이터를 추가하여 세션이 유효한지 확인하는 방법입니다. 어떻게 그 정보를 얻을 수 있습니까? 그리고 어떻게 일치하는지 확인합니까?Nodejs Expressjs 세션 IP 및 브라우저 에이전트가 일치합니다.

users.login(credentials,function(err, results) { 

    //On errors 
    if (err) { 
    res.render(routes.index, { 
     title: 'Login' 
    }); 

    //On success 
    } else if (results[0]) { 
    //Set session data and redirect to start page 
    req.session.userdata = results[0]; 
    req.session.userdata.email = req.body.email_login; 
    req.session.is_logged_in = true; 
    res.redirect('/start'); 

    //Wrong credentials 
    } else { 
    req.flash('warning','Wrong password or login'); 
    res.render('index', { 
     title: 'Login' 
    }); 
    } 
}); 

업데이트 :

req.session.ip = req.connection.remoteAddress; 
req.session.useragent = req.headers['user-agent']; 

내 인증 미들웨어에서 확인 : : 지금이이 세션에 추가 얻었다

if(req.session.userdata && req.session.is_logged_in === true && req.session.ip === req.connection.remoteAddress && req.session.useragent === req.headers['user-agent']) { 
    next(); 
    } else { 
    res.redirect('/'); 
    } 

이 안전한가 또는 이와 관련하여 위험이 있습니까? 다른 방향으로 가야할까요?

답변

1

구현이 좋게 보이며 세션 하이재킹에 대한 기본적인 보호 기능을 제공합니다.

그러나 미들웨어에 대해 잘 모르겠습니다. 사용자가 /start을 직접 요청하지 못하게하는 요인은 무엇입니까? 더 중요한 것은 미들웨어가 모든 요청을 가로 챌 때 심지어 심지어 /start의 요청을 가로 채기 때문에 무한 리디렉션 루프처럼 보이지 않습니까?

내 제안은 ip 또는 user agent가 일치하지 않을 때 항상 로그 아웃 한 사용자를 고려하는 것입니다.

+0

무한 루프가 맞습니다. 나는 코드를 편집하고 붙여 넣기 문제. 그리고 이것을 하이재킹 측면에서보다 안전하게 만드는 것에 대한 귀하의 제안은 무엇입니까? 당신이 말했듯이 그것은 매우 기본적인 것입니다,하지만 저는 정말로 제가 다른 것을 보호해야하는지 모르십니까? 모든 힌트 또는 팁 감사. 감사합니다 – georgesamper

+0

그런데 페이지는 https를 통해 전송됩니다. – georgesamper

+0

HTTPS를 통해 페이지를 전송하면 분명 좋은 결과를 얻으실 수 있습니다. 이것은 분명히 누락 된 정보였습니다. 유일한 추가 조언은 세션 쿠키에'secure' 플래그를 설정하는 것이므로 HTTPS 연결을 통해서만 전송할 수 있습니다. 이렇게하면 사용자가 실수로 비보안 페이지를 요청하여 세션 쿠키를 공개하지 않게됩니다. – Pierre