비밀번호를 잊어 버린 비밀번호 기능을 구현하는 가장 좋은 방법은 무엇입니까?

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

문제

웹 사이트에서 잊혀진 암호 함수를 만드는 가장 좋은 방법이 무엇인지 궁금합니다. 나는 거기에서 꽤 많은 것을 보았습니다. 여기에 몇 가지 또는 조합이 있습니다.

  • 암호화 질문 / 답변 (1 이상)
  • 새 비밀번호로 이메일을 보내십시오
  • 화면에서 새 비밀번호를 제공하십시오
  • 이메일을 통한 확인 : 새 비밀번호를 얻으려면 링크를 클릭해야합니다.
  • 사용자가 새 비밀번호를 입력 해야하는 페이지

잊혀진 암호 기능에 어떤 조합 또는 추가 단계를 추가 하시겠습니까? 나는 그들이 새 비밀번호를 어떻게 요청하는지와 그들이 어떻게 그것을 얻는 지 궁금합니다.

나는 비밀번호를 검색 할 수 없다는 교장에서 작동하고 있습니다. 새 비밀번호를 제공/생성해야합니다.

편집하다 나는 사용자 이름이 존재하는지 표시하지 않는 것에 대해 Cory가 말한 것을 좋아하지만 대신 무엇을 표시 해야하는지 궁금합니다. 문제의 절반은 사용자가 사용한 이메일 주소를 잊어 버렸다고 생각합니다. 어떤 종류의 "존재하지 않는"메시지가 유용하다는 것입니다. 솔루션이 있습니까?

도움이 되었습니까?

해결책

  1. 개인적으로 단기 페이지에 대한 링크가 포함 된 이메일을 보내 새 비밀번호를 설정할 수 있습니다. 페이지 이름을 어떤 종류의 UID로 만드십시오.
  2. 그것이 당신에게 호소력이 없다면, 새 비밀번호를 보내고 첫 번째 액세스에서 변경하도록 강요하는 것도 마찬가지입니다.

옵션 1이 훨씬 쉽습니다.

다른 팁

몇 가지 중요한 보안 문제 :

  • 패스 프레이즈 질문 / 답변은 일반적으로 프로세스에서 가장 약한 링크가되기 때문에 보안을 실제로 낮 춥니 다. 특히 질문을 신중하게 선택하지 않은 경우에는 비밀번호보다 누군가의 대답을 추측하는 것이 종종 더 쉽습니다.
  • 이메일이 시스템의 사용자 이름으로 작동한다고 가정하면 (일반적으로 다양한 이유로 권장) 비밀번호 재설정 요청에 대한 응답에 유효한 계정이 발견되었는지 여부는 표시되지 않습니다. 암호 요청 이메일이 제공된 주소로 전송되었음을 간단히 명시해야합니다. 왜요? 이메일이 존재하지 않는다는 응답을 통해 해커는 여러 가지 암호 요청 (일반적으로 Burp Suite와 같은 HTTP 프록시를 통해)을 제출하고 이메일이 발견되는지 여부에 대해 사용자 계정 목록을 수확 할 수 있습니다. 로그인 수확으로부터 보호하려면 로그인/인증 관련 기능이 로그인/패스 리셋 양식에 유효한 사용자의 이메일이 입력 된 시점에 대한 표시를 제공하지 않아야합니다.

더 많은 배경을 보려면 체크 아웃하십시오 웹 응용 프로그램 해커 핸드북. 안전한 인증 모델을 만드는 것에 대한 훌륭한 읽기입니다.

편집하다: 편집의 질문에 관해 - 나는 제안한다 :

"비밀번호 요청 이메일이 제공 한 주소로 전송되었습니다. 이메일이 곧 도착하지 않으면 스팸 폴더를 확인하십시오. 이메일이 없으면 제공된 이메일이있는 계정이 없습니다."

사용 편의성과 보안 사이에는 절충이 이루어지고 있습니다. 상황에 따라 이것을 균형을 맞춰야합니다. 보안은 귀하와 사용자가 이러한 불편 함을 정당화 할만 큼 중요합니까?

새 비밀번호로 이메일을 보내십시오.

비밀번호가 도착하면 새 비밀번호로 키를 강제로 변경하십시오.

이를 통해 비밀번호를 원하는 사람만이 계정에 들어가는 유일한 사람이 될 수 있습니다.

이메일이 스니핑되면 누군가가 계정에 들어갈 수 있지만 (물론) 실제 당사자는 즉시 이것을 발견합니다 (방금 보낸 암호가 작동하지 않으므로).

또한 사용자에게 비밀번호 변경 확인을 보냅니다.

누군가 새로운 암호를 얻은 다음 "비밀번호를 변경하기위한 고맙습니다"라는 이메일을 받으면 다소 당황스러워서 관리자가하지 않으면 관리자와 대화 할 것입니다.

이메일 확인/비밀번호 재설정 링크를 사용하면 더 나은 보안이 제공됩니다. 이 주위를 둘러 보면 대부분의 웹 사이트가 수행하는 방식이며 사람들은이 검증에 꽤 익숙 하므로이 유형의 인증을 사용하는 것이 좋습니다.

(Gbrandt 's) 옵션 2가 사용자에게 이미 가지고있는 개인 정보와 결합 된 경우 훌륭한 방법이라고 생각합니다. 즉 생년월일.

사용자가 이메일 주소를 입력하여 새 비밀번호 (재설정)를 요청하면 비밀번호가 재설정되기 전에 올바른 생년월일 (또는 다른 것)을 입력하고 새 제품이 사용자에게 이메일을 보내야합니다.

그를 잘 아는 사람들만이 자신의 비밀번호를 재설정함으로써 그를 괴롭힐 수 있습니다! 그것은 낯선 사람이나 봇이 될 수 없습니다

5 ~ 7 개의 잘못된 이메일 주소 및 생년월일 조합시 비밀번호가 재설정되어야하며 잘못된 자격 증명으로 인해 실패한 것으로 이메일을 보냅니다. 그런 다음 해당 계정에 대한 비밀번호 재설정은 24 시간 또는 원하는 기간 동안 중단됩니다.

(너무 많은 사용자 가이 이메일에 대해 WebAdmin에 연락하면 누군가가 웹 사이트/앱에서 정보를 악의적으로 달성하려고한다는 것을 알게 될 것입니다)

너희들은 어떻게 생각하세요?

옵션 1. IS ~ 아니다 일반적으로 다른 사람들이 쉽게 추측 할 수 있기 때문에 좋은 생각입니다. Sarah Palin의 개인 이메일 (Yahoo Idring)은 제 3자가 이런 식으로 해킹당했습니다.

다른 옵션은 더 좋고 이전 게시물이 세부 사항을 설명했습니다.

내가 생각한 아이디어는 사용자에게 전송되는 링크의 데이터에 서명하는 것이 었습니다. 그런 다음 사용자가 링크를 클릭하고 서버가 통화를 수신하면 서버는 암호화 된 부분을 가져 와서 데이터가 손대지 않았 음을 확인할 수 있습니다.

이 유스 케이스에 대한 Java 프로젝트를 구현했습니다. Github, 오픈 소스에 있습니다. 그것은 당신의 질문에 완벽하게 답변합니다 ... Java에서 구현되었습니다.

에 관해서 이메일에서 링크 - 링크를 생성하고 사용시 검증됩니다.

모든 것에 대한 설명이 있습니다 (그리고 뭔가 빠진 경우 - 알려주세요 ...)

보세요 : https://github.com/ohadr/authentication-flows

a 여기 데모.

이것은 모든 설명과 함께 readme과 함께 인증을 사용하는 클라이언트 웹 앱입니다. 구현을 지시합니다. https://github.com/ohadr/oauth2-sample/tree/master/authentication-flows

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