웹 사이트에서 "기억"을 구현하는 가장 좋은 방법은 무엇입니까? [닫은

StackOverflow https://stackoverflow.com/questions/244882

  •  05-07-2019
  •  | 
  •  

문제

내 웹 사이트에 사용자가 내 웹 사이트를 방문 할 때마다 로그인 할 필요가 없도록 사용자가 클릭 할 수있는 확인란을 갖기를 원합니다. 나는 이것을 구현하기 위해 컴퓨터에 쿠키를 저장해야한다는 것을 알고 있지만, 그 쿠키에는 무엇이 포함되어야합니까?

또한이 쿠키가 보안 취약성을 제시하는 것을 막기 위해 조심해야 할 일반적인 실수가 있습니까?

도움이 되었습니까?

해결책

개선 된 영구 로그인 쿠키 모범 사례

설명 된이 전략을 사용할 수 있습니다 여기에 모범 사례로 (2006) 또는 여기에 설명 된 업데이트 된 전략 (2015):

  1. 사용자가 기억에 성공적으로 로그인하면 Checked, 로그인 쿠키가 발행됩니다 표준 세션 관리 쿠키 외에도.
  2. 로그인 쿠키에 포함되어 있습니다 시리즈 식별자 및 토큰. 시리즈와 토큰입니다 엄청나게 무작위 숫자 적절하게 큰 공간에서. 둘 다 데이터베이스 테이블에 함께 저장되며 토큰이 해시됩니다 (SHA256은 괜찮습니다).
  3. 로그인이 아닌 사용자가 사이트를 방문하여 로그인 쿠키를 제시하면 시리즈 식별자는 다음과 같습니다. 데이터베이스에서 찾았습니다.
    1. 만약 시리즈 식별자 존재하고 해시가 있습니다 토큰 해당 시리즈 식별자의 해시와 일치하면 사용자가 고려됩니다. 인증. ㅏ 새로운 토큰 생성되고, 토큰을위한 새 해시가 이전 레코드에 저장되고, 새로운 로그인 쿠키가 사용자에게 발행됩니다 (재사용해도 괜찮습니다. 시리즈 식별자).
    2. 시리즈가 존재하지만 토큰이 일치하지 않으면 훔침 가정됩니다. 사용자는 강력하게 표현 된 경고를 받고 모든 사용자의 기억이있는 세션이 삭제됩니다.
    3. 사용자 이름과 시리즈가없는 경우 로그인 쿠키는 무시했습니다.

이 접근법은 깊이있는 방어를 제공합니다. 누군가가 데이터베이스 테이블을 유출하는 경우, 공격자에게 사용자를 가장하는 열린 문을 제공하지 않습니다.

다른 팁

사용자 ID와 토큰을 저장하겠습니다. 사용자가 사이트로 돌아 오면이 두 정보를 데이터베이스 항목과 같은 지속적인 것과 비교하십시오.

보안에 관해서는, 누군가가 쿠키를 수정하여 추가 혜택을 얻을 수있는 아무것도 넣지 마십시오. 예를 들어, 사용자 그룹이나 암호를 저장하지 마십시오. 보안을 우회 할 수있는 수정할 수있는 것은 쿠키에 저장되어서는 안됩니다.

그들의 userID와 기억을 저장하십시오. 그들이 Remember Me와 함께 로그인 할 때 확인 된 새로운 기억을 생성합니다 (표시되는 다른 기계를 무효화하는 것은 기억합니다).

그들이 돌아올 때 기억에 의해 그들을 찾아보고 userID가 일치하는지 확인하십시오.

지속적인 세션을 직접 조사하는 것은 보안 위험의 가치가 없다는 것을 알았습니다. 절대적으로 필요한 경우 사용하지만, 그러한 세션은 약하게 인증 된 경우만 고려하고 공격자에게 가치가있는 모든 것에 대해 새 로그인을 강요해야합니다.

물론 그 이유는 지속적인 세션이 포함 된 쿠키가 너무 쉽게 도난 당했기 때문입니다.

쿠키를 훔치는 4 가지 방법 ( Jens Roland의 의견 페이지에 @splattne 그의 대답을 기반으로) :

  1. 안전하지 않은 라인 위로 가로 채서 (패킷 스니핑 / 세션 납치)
  2. 사용자의 브라우저에 직접 액세스하여 (맬웨어 또는 상자에 대한 물리적 액세스를 통해)
  3. 서버 데이터베이스에서 읽어서 (아마도 SQL 주입이지만 무엇이든 될 수 있음)
  4. XSS 해킹 (또는 유사한 클라이언트 측 익스플로잇)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top