2012-11-06 2 views
1

저는 사용자가 인증 할 때 "remember me"옵션이있는 프로젝트의 시작입니다.쿠키로 PHP에서 "remember me"시스템을 만드는 안전한 방법은 무엇입니까?

  • ID : 사용자가 등록 될 때 생성 된 난수

    내 사용자의 데이터베이스 테이블은 인증을 위해 다음과 같은 기본 구조를 가지고있다. (키)

  • 사용자 이름 : 사용자가 선택한 사용자 이름은 다른 고유 사용자 이름으로 변경할 수 있습니다.
  • 해시 : 암호가 설정되면 "phpass"로 생성 된 암호의 해시입니다.

쿠키와 MySQL을 사용하여 둘 이상의 컴퓨터에서도 로그인 한 사용자를 안전하게 유지하는 방법을 알고 싶습니다.

동일한 쿠키를 사용하여 임시 세션 또는 "기억하기"섹션을 저장할 수 있기를 바랍니다. 토큰에 대해 읽었으며 모든 사용자 정보를 쿠키로 해싱하는 것에 대해 읽었지 만 안전합니까? 사용자 인증 후에 사용되는 Facebook의 쿠키를 확인하고 사용자 ID 항목이 있는지 확인하고 싶습니다.

쿠키에 정보를 해시하기로 결정한 경우 "phpass"를 사용하면 모든 페이지와 모든 AJAX 요청에 인증 확인이 표시되는 것처럼 느려지거나 간단한 MD5 기능을 사용해야합니까? 로그인을 확인할 때마다 사용자 토큰을 갱신해야합니까?

마지막으로 내가 가지고있는 최선의 선택은 무엇입니까? 이와 비슷한 질문이 많이 있었지만이 작업을 수행하는 "최선의 방법"과 같은 것을 찾지 못했습니다. 모든 게시물에서 나는이 주제에 대해 다른 무언가가 모순된다는 것을 발견했다. 나는 그것을하기위한 안전하고 깨끗한 방법을 알고 싶습니다.

답변

2

별도의 테이블을 사용하여 저장된 로그인 세션을 저장하는 것이 좋습니다. 이 테이블은 사용자가 "나를 기억"하기로 선택할 때 생성 된 고유 한 해시, 사용자의 IP 주소 및 해당 user_id를 저장합니다.

사용자가 영구 로그인을 유지하기로 결정한 경우 해시를 생성하고 해시 값을 쿠키 값으로 저장 한 다음 IP/user_id를 "기억 된"테이블에 저장합니다.

session_start/check 시퀀스에서 먼저 세션이 설정되어 있는지 확인하고, 쿠키가 설정되어 있는지 확인합니다. 쿠키가 설정된 경우 IP 주소를 데이터베이스에 대한 쿠키의 해시 값과 일치시킨 다음 모든 검사 세션 상태를 "인증 됨"으로 설정하십시오.

IP 주소와 고유 한 해시를 사용하는 테이블을 사용하는 이유는 여러 장치/컴퓨터를 지속적으로 사용할 수있게하기 위해서입니다. 각 장치에는 remembered_sessions 테이블에 항목이 있습니다.

이 방법은 쿠키에 암호를 저장하지 않으며 암호를 성공적으로 입력 한 사용자 만 컴퓨터에이 쿠키가 저장됩니다. 또한 누군가가 쿠키에서 해당 사용자의 해시를 움켜 잡더라도 인증 된 것으로 간주되기 위해서는 동일한 네트워크에 있어야합니다.

+1

또한 쿠키에 사용자 ID를 저장하는 것이 좋습니다 – zerkms

+1

동적 IP가있는 연결에 문제가 있습니다 –

+0

안전을 보장한다면 나중에 지불해야 할 작은 금액입니다. –

관련 문제