2010-08-09 8 views
2

암호, 사용자 이름 및 사용자 ID를 쿠키에 저장하는 것이 안전하지 않으며 대신 세션 ID를 쿠키에 저장해야한다고 들었습니다. 여기 내가 잃어버린 곳이있다.세션 ID로 세션 데이터에 액세스

내 목표는 기본적인 '기억하기'기능을 사용하는 것입니다. 일반적으로 쿠키에 사용자 로그인 정보를 저장 하겠지만이 방법은 안전하지 않으므로 대안이 무엇인지 궁금합니다. 세션을 만들 때마다 고유 ID를 만드는 쿠키가 만들어 지지만 브라우저를 닫으면 만료된다는 사실을 알고 있습니다. 그렇다면 브라우저가 닫힌 후에 어떻게이 세션 정보에 액세스 할 수 있습니까?

모든 도움을 주실 수 있습니다.

답변

2

아마도 가장 좋은 방법으로 제안 된 어떤 대부분의 타사 응용 프로그램이 할 것은 다음과 같은 필드가있는 "user_sessions"데이터베이스 테이블 작성하는 것입니다 :

session_id (var_char) 
user_id (int) 
ip_address (var_char) 
last_logged_in (unix timestamp) 

는 그런 다음를 저장하기 위해 쿠키를 사용합니다 어떤의 MD5 해시 당신은 아마도 같은 :

md5($username.$ip); //since md5 has a lot of reverse look ups now you should use a number of fields to validate. You could use a different crypto function to make it more difficult to crack, but md5 is the simplest version available in all php versions. 

편집 : 당신은 다음 들이 이미 로그인 한 경우 볼을 SESSION_ID 데이터베이스와 쿠키에서 저장된 해시를 비교하는 COUPL을 결합하는 이유를. e는 md5 함수의 필드의 "추측 가능한"해싱 형식을 덜 만드는 것입니다. 따라서 쿠키를 편집하고 다른 사람으로 로그인 할 가능성이 줄어 듭니다.

이것은 모든 사용자 (온라인 사용자를 추적 할 수있는 방법)로 수행 할 수 있으며 쿠키에 "지속성"로그인 변수를 설정하기 만하면됩니다. 예.

p_login=true || p_login=false 

그런 식으로 자동 로그인 또는 로그인 강제 여부를 알 수 있습니다.

참고 : 암호, 세션 ID 및 사용자를 해시하는 다른 방법으로 http://www.openwall.com/articles/PHP-Users-Passwords을 볼 수 있습니다.

+0

감사합니다. 몇 개의 질문 : sessionID는 쿠키 ('md5 ($ username.ip);')에 저장된 것과 같은 것입니까? // 예제에 따르면 IP 주소가 인증에 사용 된 것 같습니다. 따라서 IP 주소가 변경되면 (프록시) 다시 로그인해야합니다. (문제가 아니라 호기심.) // 또한 last_logged_in 필드의 목적은 무엇입니까? (다시 호기심?) – williamg

+0

IP 주소는 해시와 관련하여 고유 한 것입니다. 사용자가 사용자 이름을 해싱하고 있음을 깨닫게 될 가능성이 더 큽니다. 그런 다음 쿠키를 해킹하여 다른 사람과 로그인 할 수 있습니다. 그것이 md5 ($ username. $ ip)이면 해시가 무엇인지 알아내는 것이 더 어렵습니다. IP가 쿠키에 md5 해시로 저장 될 때 변경되는 것은 중요하지 않습니다. 따라서 세션 ID가 'md5 ($ username. $ id)'인 DB에 세션이 있는지 확인하면됩니다. 그것을 만들지 않으면. 새 IP 주소 및 해시로 업데이트하는 경우 마지막으로 로그인 한 시간과 IP를 저장하는 것은 보안을위한 것입니다. 무단 액세스가 있으면 확인할 수 있습니다. – User123342234

+0

좀 더 명확히하기 위해 내 답변을 업데이트하십시오. – User123342234

2

이것은 매우 가파른 학습 곡선 일 수 있습니다. 기존 CMS 또는 다른 솔루션을 사용하여 달성하고자하는 목표 또는이 기능을 포함 할 수있는 프레임 워크를 고려해 보셨습니까?

'기억하기'기능의 경우 사용자 ID가 포함 된 쿠키와 알려진 해시 비밀번호로 다시 해시 된 해시 암호를 보낼 수 있습니다. 이 솔루션을 사용하면 다른 사람의 암호를 재설정하지 않고도 누군가의 로그인이 원격으로 만료되지 않도록 할 수 있습니다.

따라서 다른 방법은 해당 사용자의 로그인에 대한 고유 토큰을 생성하고 해당 고유 토큰을 특정 사용자 및 만료 날짜와 관련시키는 다른 데이터베이스 테이블을 갖는 것입니다.

+0

분명히 후자의 접근 방식 ... –

+0

하지만 토큰을 사용하면 암호 또는 사용자 ID를 저장하는 것만큼 취약하지 않습니까? – williamg

+0

응답 첫 부분에 관해서는 템플릿 사용을 고려해 보았습니다.하지만 그렇지 않은 이유가 있습니다. 주로, 나는 그것을 스스로하는 것을 즐긴다. 나는 그것을하는 법을 배우는 것을 즐긴다. 내 마음 속에서, 내가 그렇게하지 않으면 그렇게하는 법을 배울 수 없을 것이다. (그리고 웹에서 또는 SO에서 여기있는 훌륭한 사람들로부터 그것을하는 방법을 배우는 것 자체를함으로써) – williamg

관련 문제