Forgot Password: jaka jest najlepsza metoda implementacji funkcji forgot password?

Zastanawiam się, jaka jest najlepsza metoda tworzenia funkcji zapomnianego hasła na stronie internetowej. Widziałem sporo tam, oto kilka lub kombinacja:

  • hasło Pytanie / Odpowiedź (1 lub więcej)
  • wyślij e-mail z nowym hasłem
  • na ekranie podaj nowe hasło
  • potwierdzenie przez e-mail: Należy kliknąć link, aby uzyskać nowe hasło
  • strona wymagająca od użytkownika wprowadzenia nowego hasła

Jaką kombinację lub dodatkowe kroki byś Dodaj do funkcji Zapomniałeś hasła? Zastanawiam się, jak zażądają nowego hasła i jak w końcu je dostaną.

Działam na zasadzie, że hasła nie można odzyskać; nowe hasło musi być podane/wygenerowane.

Edit podoba mi się to, co powiedział Cory o nie wyświetlaniu, jeśli nazwa użytkownika istnieje, ale zastanawiam się, co zamiast tego wyświetlić. Myślę, że połowa problemu polega na tym, że użytkownik zapomniał jakiego adresu e-mail użył, który wyświetla jakiś komunikat" nie istnieje " jest przydatny. Jakieś rozwiązania?

Author: Darryl Hein, 2009-02-07

7 answers

  1. osobiście wysłałbym maila z linkiem do krótkookresowej strony, która pozwala im ustawić nowe hasło. Stwórz nazwę strony jakiś UID.
  2. Jeśli to nie przemawia do ciebie, wysłanie im nowego hasła i zmuszenie ich do zmiany go przy pierwszym dostępie również by się przydało.

Opcja 1 jest o wiele łatwiejsza.

 45
Author: Gregor Brandt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 02:15:52

Kilka ważnych kwestii bezpieczeństwa:

  • hasło pytanie / odpowiedź faktycznie obniża bezpieczeństwo, ponieważ zazwyczaj staje się najsłabszym ogniwem w procesie. Często łatwiej jest odgadnąć czyjąś odpowiedź niż hasło - szczególnie jeśli pytania nie są starannie dobrane.
  • zakładając, że wiadomości e-mail działają jako nazwa użytkownika w systemie( co jest zwykle zalecane z różnych powodów), odpowiedź na żądanie zresetowania hasła nie powinna wskazywać, czy poprawny konto zostało znalezione. Należy po prostu stwierdzić, że wiadomość e-mail z prośbą o hasło została wysłana na podany adres. Dlaczego? Odpowiedź wskazująca,że e-mail nie istnieje / nie istnieje, pozwala hakerowi zebrać listę kont użytkowników, przesyłając wiele żądań haseł (zazwyczaj za pośrednictwem serwera proxy HTTP, takiego jak burp suite) i zwracając uwagę, czy e-mail został znaleziony. Aby zabezpieczyć się przed logowaniem, należy upewnić się, że żadne funkcje związane z logowaniem/auth nie wskazują, kiedy został wprowadzony prawidłowy adres e-mail użytkownika na formularzu login / pass reset.

Aby uzyskać więcej informacji, zapoznaj się z Web Application Hackers Handbook. To doskonały odczyt na temat tworzenia bezpiecznych modeli uwierzytelniania.

EDIT : odnośnie pytania w Twojej edycji-proponuję:

" E-mail z prośbą o hasło został wysłane na podany przez Ciebie adres. Jeśli wiadomość e-mail nie dotrze wkrótce, sprawdź folder ze spamem. Jeśli nie przychodzi e-mail, wtedy nie ma konta z e-mailem do ciebie pod warunkiem."

Jest tu kompromis między łatwością użytkowania a bezpieczeństwem. Musisz to zrównoważyć w oparciu o kontekst - czy bezpieczeństwo jest wystarczająco ważne dla Ciebie i Twoich użytkowników, aby uzasadnić tę niedogodność?

 24
Author: Cory House,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-11 21:00:48

Wyślij e-mail z nowym hasłem.

Wymuś zmianę hasła po ich przybyciu i wprowadź nowe hasło.

Gwarantuje to, że osoba, która chciała hasło, będzie jedyną osobą, która dostanie się na konto.

Jeśli e-mail jest wąchany, ktoś może dostać się na konto (oczywiście), ale prawdziwa strona odkryje to natychmiast (jak ich hasło, które właśnie wysłałeś im nie działa).

Również wysyłanie potwierdzeń zmian hasła do użytkowników.

Jeśli ktoś dostanie nowe hasło, a następnie e-mail z napisem "thanx za zmianę hasła" ,będzie raczej zdziwiony i porozmawia z adminem, jeśli tego nie zrobił.

 8
Author: Will Hartung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 02:15:38

Korzystanie z linku weryfikacji e-mail/resetowania hasła zapewni Ci większe bezpieczeństwo. Jeśli się rozejrzysz, tak robi większość stron internetowych, a ludzie są dość przyzwyczajeni do tej weryfikacji, więc polecam użycie tego typu uwierzytelniania.

 1
Author: Brock Woolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 02:25:21

Myślę ,że (gbrandt ' s) Opcja 2 byłaby świetną metodą, jeśli jest połączona z niektórymi danymi osobowymi, które już masz dla użytkownika. Data urodzenia.

Gdy użytkownik żąda nowego hasła (resetowania) poprzez wprowadzenie swojego adresu e-mail, musi również podać poprawną datę urodzenia (lub coś innego), zanim hasło zostanie zresetowane i nowe zostanie wysłane użytkownikowi e-mailem.

Tylko ci, którzy dobrze go znają, mogą go zirytować przez zresetowanie hasła! It cant be a stranger lub bot

Po 5 lub 7 błędnych kombinacjach adresu e-mail i Daty Urodzenia użytkownik otrzymuje wiadomość e-mail, że jego hasło zostało poproszone o zresetowanie i nie powiodło się z powodu nieprawidłowego poświadczenia. Następnie Resetowanie hasła dla tego konta jest zawieszone na 24 godziny lub dowolny żądany okres.

(jeśli zbyt wielu użytkowników skontaktuje się z webadmin w sprawie tego e-maila, będzie wiedział, że ktoś próbuje złośliwie uzyskać informacje z twojej witryny/aplikacji)

Co myślicie?

 1
Author: Auero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-31 18:43:28

Opcja 1. jest nie dobrym pomysłem, ponieważ ogólnie jego staje się łatwo domyśleć przez innych. Osobisty adres e-mail Sarah Palin (myślę, że Yahoo) został zhakowany w ten sposób przez stronę trzecią.

Inne opcje są lepsze, a poprzednie posty nakreśliły szczegóły.

 0
Author: Jayden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-07 02:24:46

Pomysł, o którym myślałem, to podpisanie danych w linku, który jest wysyłany do użytkownika. Następnie, gdy użytkownik kliknie łącze, a serwer otrzyma połączenie, serwer otrzyma również zaszyfrowaną część i może potwierdzić, że dane zostały nietknięte.

Zaimplementowałem do tego celu projekt JAVA. To jest na GitHub, open source. Doskonale odpowiada na twoje pytanie... zaimplementowane w Javie.

Co do linku w mailu - generuje link, plus sprawdza ją po użyciu.

Są wyjaśnienia na wszystko (a jeśli czegoś brakuje-daj znać...)

Zobacz: https://github.com/OhadR/Authentication-Flows

Zobacz Demo tutaj .

Jest to klient web-app, który używa auth-flows, z README ze wszystkimi wyjaśnieniami. kieruje cię do realizacji: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows

 -1
Author: OhadR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-06 08:36:19