2012-08-11 2 views
0

ASP.NET MVC, Entity framework, jQuery 사용. 내가, 사용자에게 내가 함께 왔어요 접근 방식을 그들이 "저를 기억"을 클릭 한 경우 자동으로 로그인 할 수있는 능력을주고 싶은 것은 :자동으로 사용자를 사이트에 로깅하는 시스템

  1. 때 사용자
    • 해시 PW 로그인하고 저장소에 DB 사용자가 &에 로그인 할 때 '나를 기억해'둡니다.
    • 암호화 된 사용자 ID와 일종의 구분 기호 및 해시 된 PW가있는 쿠키를 만듭니다.

그런 다음 사용자가 돌아 오면 다음 번에, 나는 그들의 쿠키를 확인 할 수 있으며, 만약 존재한다면 나는 AJAX를 사용해 로그인합니다. 사용자가 로그 아웃하면 나는 물론 쿠키를 삭제합니다.

자동 로그인 기능을 수행하는 올바른 방법입니까?

내 해싱 함수와 User ID encrypting func가 서버 측이 될 것으로 생각하고, AJAX를 통해 해당 함수를 호출 할 쿠키를 생성합니다.

이 모범 사례입니까? (사용자가 로그인 나타내는 값으로 쿠키를 가짐)

감사합니다

답변

3

귀하의 접근 방식은 상당히 표준입니다.

하지 표준 (특히 암호)를 해시 사용자 이름과 암호를 저장하는 무엇입니까 - 확실하지 당신이 (HTTP 연결) 일반 텍스트로 전송 및 쿠키 때문에 필요 이유를 사이에 누군가를주고있다 귀하의 사이트와 사용자가 암호 해시를 볼 수있는 능력과 비밀 번호를 얻기 위해 그것을 깰 기회. 대신 암호 해시의

, (말하는 GUID)는 쿠키에 저장 독특한 "loggedIn"토큰을 생성 -. 이것은 당신이 사용자가 로그인되어 있는지 여부를 확인하기 위해 비교 무엇

+0

좋아, 네가하는 말을 생각해. 그래서 GUID를 만들고 사용자는이를 클라이언트 측 쿠키에 저장합니다. 사용자가 로그인하면 (자동으로) 데이터베이스와 일치합니다. guid 키가 일치하는 user_auth_guds와 같은 SQL 테이블에 행이 있으면 사용자를 로그인합니까? 로그 아웃하면 클라이언트 측 쿠키가 삭제됩니다. – Baconbeastnz

+0

@Baconbeastnz - 오른쪽에 대한 소리. 민감한 정보 노출에 관한 것입니다. 또한 사용자가 로그 아웃/패스워드를 잊었을 때 데이터베이스에서 토큰 값을 지우므로 캡처 된 경우 다시 사용할 수 없습니다. – Oded

+0

감사합니다, 당신의 가족에게 칭찬 해 주셔서 감사합니다 :) – Baconbeastnz

1

가능한 많은 접근법 중 하나는 다음과 같습니다 :

참고 : Pure PHP로 코딩했습니다. 그러나 논리는 모든 언어에서 동일 할 것입니다.

  1. set $ redirect = FALSE.
  2. $ _GET [ "logout"]이 (가) 설정 되었습니까? 예인 경우 3으로 이동하고 그렇지 않으면 5로 이동합니다.
  3. 쿠키가 설정되면 삭제, 인증, 재 요청, 세션 삭제.
  4. 로그인 양식을 표시하고 종료하십시오.
  5. 게시물 요청입니까? 예인 경우 6으로 이동하고 그렇지 않으면 18로 이동
  6. $ redirect = TRUE로 설정하십시오.
  7. 사용자 이름 & 비밀 번호가 제공됩니까? 그렇다면 8로 가십시오. 그렇지 않으면 3으로 가십시오
  8. $ username, $ pass-hash를 얻으십시오 & $ rem-me-hash from db.
  9. $ username & $ 암호는 DB와 동일합니까?yes이면 yes로, 그렇지 않으면 false로 설정한다.
  10. 쿠키 설정 [ "username"] = sanitized ($ _ POST [ "username"])
  11. $ auth = sha1 (username .password.time.6random_letters).
  12. 세션 [ "auth"] = sha1 ($ auth)을 설정하십시오. $ auth을 설정 해제하십시오.
  13. 나를 기억 옵션이 선택되어 있습니까? 예 경우는 true, 그렇지 않은 경우는 15
  14. 설정 $ REM 수면 = SHA1로 이동 (13)로 이동 ($ user_string. $ 시간입니다. $ 암호를 입력합니다. $ 사용자 이름. 임의 $)
  15. 설정 쿠키 [ "REM"] = $ 렘
  16. $ rem = 0을 설정하십시오.
  17. $ rem! = $ rem-me-hash_DB 인 경우 $ rem을 DB에 삽입하십시오. 23으로 가십시오
  18. $ rem 쿠키가 설정되어 있습니까? 예 19로 이동, 그렇지 않으면 20으로 이동
  19. $ rem cookie == $ rem-hash-in-db입니까? 그렇다면, 다른가 $ 사용자 이름-쿠키가 & & $ 인증-쿠키 & & 인증-SESSION 세트 3
  20. 로 이동 (22)로 이동? 예이면 21로 이동하고 그렇지 않으면 3으로 이동합니다.
  21. sha1 ($ auth-cookie) === $ _SESSION [ "auth"]입니까? 예인 경우 22로 이동하고 그렇지 않으면 3으로 이동하십시오.
  22. $ redirect == TRUE입니까? 예인 경우 301, GET 방법을 사용하여이 동일한 페이지로 다시 리디렉션하십시오. 다른 곳으로 가려면
  23. 여기 내 비밀 스타 트렉 배경 화면 (내용)입니다.

긴 과정이지만 모든 시나리오에 적용됩니다.

모든 알고리즘을 password.php에 저장하고 보호하려는 모든 파일 위에이 파일을 포함시킵니다. 가능한 모든 시나리오를 거쳐야 만 비밀 콘텐츠를 제어 할 수 있습니다. 모든 오류가 발생하면 스크립트에 로그인 양식 & 종료가 표시됩니다.

또한 당신이 프로세스를 POST 요청을 받고, 위로 &에 이중 폼 제출을 방지하기 위해, GET 방식으로 다시 사용자를 리디렉션 곳 (Wikipedia) 접근 방식을 후 리디렉션이-얻기 구현 새로 고침 버튼을 누르십시오.

위 설명에서 오타 또는 혼합 개념이있을 수 있습니다. 개선에 대해 알려주세요.

관련 문제