2012-06-27 4 views
1

사용자가 기억 기능을 선택하면 사용자 이름과 ID를 쿠키에 저장합니다. 그런 다음 사용자가 사이트로 돌아 오면 데이터베이스와 사용자 이름 및 ID를 확인하여 사용자가 합법적인지 확인합니다. 다음으로 세션 변수에 쿠키 데이터를 저장하여 사용자를 로그인합니다. 이 방법이 사용자를 기억하고 로그인하는 적절한 방법입니까?쿠키에 사용자 정보 저장

+0

http://stackoverflow.com/questions/2594960/best-practice-to-implement-secure-remember-me –

답변

3

쿠키는 데이터를 저장하는 매우 안전한 방법은 아닙니다. 쿠키는 사용자가 수정할 수 있으며 누군가 귀하의 사이트를 "해킹"할 수 있습니다. 내가 제안 할 것은 쿠키의 일부 문자열을 저장하는 것입니다. 또한 데이터베이스의 쿠키에서 해시 된 문자열을 저장하십시오. 이렇게하면 사용자가 사이트로 돌아올 때 쿠키가 채워 졌는지 확인하고 데이터베이스의 해시 된 값과 일치시킨 다음 해당 해시 값을 소유 한 사용자를 찾습니다. 모두가 유효한 경우, 필드까지 유효한에서

데이터베이스 설정

secretKey PK varchar 
userid (could be unique) int 
validUntil int or date/time 
    //If userID is unique you will have to remove this row from the 
    // database when a new key is made for the user, This would then mean 
    // that a user would only be allowed to be rememberd on one computer 

의사

//User logs in with remember me 
    //set cookie to something like md5(userid,username,timestamp) 
    //store the md5 in the database layout 
//User Returns to site 
    //check to see if cookie is set 
     //if cookie set 
      //find md5 in database which is logged with user id 
      //if found and not yet expired log in 
      //else show login page 
     //if cookie not set show login page 

. 그들을 로그인 당신은 로그인에서 이주 말을 설정합니다. 유효 기간이 경과 한 후에는 해당 키가 작동하도록하고 사용자가 쿠키가 만료되었는지 확인하십시오.

쿼리 키 = "// 여기 MD5를 넣어"에서 rememberme 및 validUntil로부터

SELECT * 로그인 확인> 시간()

+0

가 좋아, 난 당신이 무슨 말을하는지 볼 수 있지만 내가 어떻게 validUntil 필드 처리하나요? 그 날짜가 지날 때 나는 무엇을해야합니까? – user532493

+0

새 게시물보기 – bretterer

+0

이 secretKey 필드가 모든 사용자와 함께 테이블에 있어야합니까, 아니면 secretKeys에 대한 새 테이블이 있어야합니까? – user532493

2

번호

그것은에 얼마나 안전한 따라 달라집니다 당신은 얻고 싶습니다.

  • 쿠키 (사용자 이름/ID/등)의 특정 항목을 저장하지 마십시오. 보안을 강화하기 위해 수행 할 수있는 작업이 일부 또는 전부입니다. 무작위로 생성 된 난센스 (토큰)를 사용하십시오.
    1. 당신의 DB에서는 토큰 < 수 있습니다 -> 사용자 매핑
    2. 이 DB에 대한 토큰을 확인하고 일치
    3. 아마도 "소비"그것으로 (플래그 토큰을 파괴에게있을 때의 사용자를 기록 당신이 무엇을 결정하든, 토큰은 더 이상 작동하지 않아야합니다.) 사용자가 (당신의 DB에없는, 즉 하나 또는 그 소비로 신고 된) 부실 토큰을 보내는 경우
  • 사용 https 만이이 것을 의미 등
  • 쿠키, 로그인을 전송하는 토큰이 손상되었을 가능성이 있습니다. 인증 된 사용자 (그리고 심지어 아약스도)에 대한 모든 요청에 ​​대해, 부실 토큰 시도 목록과 함께 로그인 한 토큰 (세션에 저장할 수 있음)을 비교하십시오. 일치하는 항목이 있으면 인증 된 사용자가 토큰을 납치했을 가능성이 있습니다. 그들을 쫓아 내라.
+1

알았어, 모든 조언을 해줘서 고마워. – user532493