문제

방금 웹 사이트에서 사용자 로그인을위한 "Remember Me"기능을 구현했습니다. 대부분의 조언은 userID를 쿠키에 저장 한 다음 길고 가용 할 수없는 임의의 키를 갖는 것이 었습니다. 이 두 가지 일치가 모두 인증 된 것으로 간주됩니다.

두 줄이 실제로 도움이됩니까? 더 이상 키가 정확히 같은 일을하지 않습니까?

다시 말해, 두 개의 키가 더 긴 키로 공격에 똑같이 민감하지 않습니까? (나는 당신이 가지고있는 수에 관계없이 키의 총 길이 일 것이라고 생각합니다)

메모: 여기에는 DB 쿼리 효율 문제도있을 수 있습니다. 예를 들어, DB에서 큰 UUID를 찾는 것은 적은 수를 찾는 것만 큼 쉽지 않습니다. (접선 메모에서 Gmail은 사용자 이름과 함께 일회성 로그인 토큰으로 6 자리 숫자를 사용합니다.)

도움이 되었습니까?

해결책

이것에 대한 강력한 토론 그래서 스레드.

... 사용자는 인증 된 것으로 간주됩니다.

아마도 인증이지만 제한된 권위를 읽어야 할 것입니다.

의견 당 : 한 번 사용하기 때문에 다소 안전하고 추측하기가 어렵습니다. 따라서 쿠키가 손상되면 공격자는 신속하게 행동해야합니다. 그렇지 않으면 합법적 인 사용자 로그인에 의해 토큰이 무효화되는 반면 userID는 오랫동안 변경되지 않을 수 있습니다.

다른 팁

나는 암호화 전문가는 아니지만 무차별 대결 시도를 확인하는 한 짧은 키 (Gmail의 6 자리)를 사용할 수 있어야합니다. 실제 취약점은 사용자가 로그인 할 때 듣는 사람들이 (예 : 사이드 재킹) 듣는 것입니다.

내가 이전에 만든 사이트에서 나는 user_id 그리고 사용자 비밀번호의 소금에 절인 해시. 내가 사용자를 인증하기 위해 두 필드를 사용한 주된 이유는 다른 테이블을 추가하는 데 어려움을 겪었 기 때문에 (따라서 데이터베이스 설계를 복잡하게 만들었 기 때문입니다.) user_id 또한 쿠키에 저장되면 사용자 테이블에서 색인화 된 조회를 수행하고 소금에 절인 해시를 사용자와 효율적으로 일치시킬 수 있습니다. 물론 user_id와 해시를 하나의 값으로 연결하고 쿠키에 저장할 수 있습니다.

무작위로 잘못된 문자열이있는 경우 임의 문자열을 사용자 ID와 연결하고 해당 특정 사용자를 위해 다른 조회를 수행하기 위해 별도의 테이블이 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top