Chcę utworzyć system logowania użytkownika w celu nauki. Mam kilka pytań.Właściwy sposób wdrożenia systemu logowania użytkownika
Zrobiłem trochę badań i odkryłem, że właściwym sposobem wdrożenia systemu logowania użytkownika jest zapamiętanie nazwy użytkownika/identyfikatora i zaszyfrowanej/zakodowanej wersji hasła w bazie danych. Gdy użytkownik zaloguje się, kod po stronie klienta zaszyfruje hasło przez MD5 lub SHA-1 lub coś podobnego, a następnie wyśle to zaszyfrowane hasło do strony serwera, a następnie porówna je z tym w bazie danych. Jeśli są dopasowane, użytkownik loguje się pomyślnie.
Ten sposób implementacji może uniemożliwić administratorom baz danych lub programistom zobaczenie prawdziwego tekstu hasła w bazie danych. Może to również uniemożliwić hakerom przechwycenie prawdziwego hasła podczas przesyłania w Internecie. Jednak mam coś, czego nie rozumiem.
Moje pierwsze pytanie jest taka, że co, jeśli hakerzy znają hash/zaszyfrowany wersję hasło (hacking bazy danych) lub administratorom, programistom uzyskać wersję hash hasła przez po prostu widząc tekst w bazie danych , mogą z łatwością utworzyć program, który wyśle tę hashową wersję hasła po stronie serwera, a następnie dokonać porównania, a następnie z powodzeniem zalogować się. Jeśli to zrobią, szyfrowanie hasła wydaje się mało użyteczne. Chyba źle mnie zrozumiałem.
Drugie pytanie brzmi: czy jest to (sposób opisany powyżej) najpopularniejszy i najbardziej odpowiedni sposób wdrożenia funkcji logowania użytkownika w obecnej branży? Czy muszę zrobić wszystko ręcznie lub jakaś baza danych ma jakąś wbudowaną możliwość zrobienia tego samego? Czy istnieje najczęstszy sposób/metoda logowania użytkownika do strony internetowej lub aplikacji internetowej? Jeśli tak, proszę podać mi kilka szczegółów.
Moja dawna firma użyła couchDB do przechowywania informacji o logowaniu użytkownika, w tym haseł. Nie zrobili zbyt wiele na temat szyfrowania. Powiedzieli, że couchDB automatycznie zaszyfruje hasło i zapisze je w dokumentach. Nie jestem pewien, czy to jest bezpieczny sposób. Jeśli tak, to jest całkiem wygodne dla programistów, ponieważ oszczędza dużo pracy.
Czy ta droga (punkt 3) jest wystarczająco bezpieczna do normalnego użytkowania? Czy inny system baz danych, taki jak mySQL, ma taką zdolność, która może zrobić to samo? Jeśli tak, czy to oznacza, że użycie wbudowanej metody mySQL jest wystarczająco bezpieczne?
Nie szukam bardzo bezpiecznego sposobu implementacji funkcji logowania użytkownika. Raczej szukam sposobu, który jest popularny, łatwy do wdrożenia, odpowiedni, wystarczająco bezpieczny dla większości aplikacji internetowych. Proszę, daj mi radę. Podane szczegóły będą naprawdę mile widziane.
Co się stanie, jeśli system zaszyfrowałby stronę klienta haseł z solą publiczną, a następnie ponownie uruchomił stronę serwera haseł z prywatną solą (tj. Ciągiem przechowywanym na serwerze lub losowo wygenerowaną solą po stronie serwera)? W ten sposób serwer nigdy nie poznałby prawdziwego hasła w postaci zwykłego tekstu, ani wersja tekstowa hasła nie zostanie wysłana na serwer w dowolnym momencie, aby haker mógł pobrać. Wiem, że pośrednik nadal może pobrać haszowanie hasła i spróbować brutalnie zmusić go solą w javascript, ale mimo to jego życie byłoby znacznie trudniejsze, czyż nie? –
Jeśli klient wysyła hashowane hasło do serwera, to * hashowane * jest faktycznie rzeczywistym hasłem. Jeśli haker przechwycił zakodowane hasło, może wysłać je na serwer, nie znając oryginału, który został unhashed, a serwer go zaakceptuje. –
Tak, ale dotyczy to również hasła tekstowego wysyłanego na serwer. Jeśli haker przechwyci go, może go użyć w prosty sposób i po prostu zalogować się na konto.Jeśli jednak hasło w postaci zwykłego tekstu zostanie zahartowane, jeśli przechwyci go haker, może zalogować się tylko na tę konkretną stronę, a nie na żadną inną stronę internetową, na której klient może mieć to samo hasło. –