웹 사이트에서 "기억"을 구현하는 가장 좋은 방법은 무엇입니까? [닫은
-
05-07-2019 - |
문제
내 웹 사이트에 사용자가 내 웹 사이트를 방문 할 때마다 로그인 할 필요가 없도록 사용자가 클릭 할 수있는 확인란을 갖기를 원합니다. 나는 이것을 구현하기 위해 컴퓨터에 쿠키를 저장해야한다는 것을 알고 있지만, 그 쿠키에는 무엇이 포함되어야합니까?
또한이 쿠키가 보안 취약성을 제시하는 것을 막기 위해 조심해야 할 일반적인 실수가 있습니까?
해결책
개선 된 영구 로그인 쿠키 모범 사례
설명 된이 전략을 사용할 수 있습니다 여기에 모범 사례로 (2006) 또는 여기에 설명 된 업데이트 된 전략 (2015):
- 사용자가 기억에 성공적으로 로그인하면 Checked, 로그인 쿠키가 발행됩니다 표준 세션 관리 쿠키 외에도.
- 로그인 쿠키에 포함되어 있습니다 시리즈 식별자 및 토큰. 시리즈와 토큰입니다 엄청나게 무작위 숫자 적절하게 큰 공간에서. 둘 다 데이터베이스 테이블에 함께 저장되며 토큰이 해시됩니다 (SHA256은 괜찮습니다).
- 로그인이 아닌 사용자가 사이트를 방문하여 로그인 쿠키를 제시하면 시리즈 식별자는 다음과 같습니다. 데이터베이스에서 찾았습니다.
- 만약 시리즈 식별자 존재하고 해시가 있습니다 토큰 해당 시리즈 식별자의 해시와 일치하면 사용자가 고려됩니다. 인증. ㅏ 새로운 토큰 생성되고, 토큰을위한 새 해시가 이전 레코드에 저장되고, 새로운 로그인 쿠키가 사용자에게 발행됩니다 (재사용해도 괜찮습니다. 시리즈 식별자).
- 시리즈가 존재하지만 토큰이 일치하지 않으면 훔침 가정됩니다. 사용자는 강력하게 표현 된 경고를 받고 모든 사용자의 기억이있는 세션이 삭제됩니다.
- 사용자 이름과 시리즈가없는 경우 로그인 쿠키는 무시했습니다.
이 접근법은 깊이있는 방어를 제공합니다. 누군가가 데이터베이스 테이블을 유출하는 경우, 공격자에게 사용자를 가장하는 열린 문을 제공하지 않습니다.
다른 팁
사용자 ID와 토큰을 저장하겠습니다. 사용자가 사이트로 돌아 오면이 두 정보를 데이터베이스 항목과 같은 지속적인 것과 비교하십시오.
보안에 관해서는, 누군가가 쿠키를 수정하여 추가 혜택을 얻을 수있는 아무것도 넣지 마십시오. 예를 들어, 사용자 그룹이나 암호를 저장하지 마십시오. 보안을 우회 할 수있는 수정할 수있는 것은 쿠키에 저장되어서는 안됩니다.
그들의 userID와 기억을 저장하십시오. 그들이 Remember Me와 함께 로그인 할 때 확인 된 새로운 기억을 생성합니다 (표시되는 다른 기계를 무효화하는 것은 기억합니다).
그들이 돌아올 때 기억에 의해 그들을 찾아보고 userID가 일치하는지 확인하십시오.
지속적인 세션을 직접 조사하는 것은 보안 위험의 가치가 없다는 것을 알았습니다. 절대적으로 필요한 경우 사용하지만, 그러한 세션은 약하게 인증 된 경우만 고려하고 공격자에게 가치가있는 모든 것에 대해 새 로그인을 강요해야합니다.
물론 그 이유는 지속적인 세션이 포함 된 쿠키가 너무 쉽게 도난 당했기 때문입니다.
쿠키를 훔치는 4 가지 방법 ( Jens Roland의 의견 페이지에 @splattne
그의 대답을 기반으로) :
- 안전하지 않은 라인 위로 가로 채서 (패킷 스니핑 / 세션 납치)
- 사용자의 브라우저에 직접 액세스하여 (맬웨어 또는 상자에 대한 물리적 액세스를 통해)
- 서버 데이터베이스에서 읽어서 (아마도 SQL 주입이지만 무엇이든 될 수 있음)
- XSS 해킹 (또는 유사한 클라이언트 측 익스플로잇)