Przeczytałem wiele, wiele, wiele postów o tym, jak „prawdopodobnie źle przechowujesz hasła”. Zawsze odnoszą się do przechowywania haseł na serwerze, na którym loguje się użytkownik; w zasadzie odmieniają (zamierzone słowa) wszechobecne porady, takie jak upewnij się, że słone hasła itp. itp. Jednak nigdy nie widziałem artykułu na temat najlepszych praktyk dotyczących przechowywania haseł na kliencie, aby klient nie musiał się logować ręcznie za każdym razem, gdy chcą się zalogować; funkcja „zapamiętaj mnie”.
Wiele programów ma tę funkcję, od przeglądarek po programy takie jak Dropbox.
Czytałem niedawno stary artykuł o tym, jak Dropbox przechowywał identyfikator na twoim komputerze, który możesz po prostu skopiować / wkleić na innym komputerze i uruchomić Dropbox i zalogować się jako urządzenie, z którego masz identyfikator; bez logowania, bez niczego i pełny dostęp do konta Dropbox. Wygląda to na naprawdę głupi projekt, ale nie mogę wymyślić lepszego sposobu na zrobienie tego.
Nie jestem nawet pewien, jak uniknąć przechowywania czegoś takiego jak plik cookie w postaci zwykłego tekstu. Jeśli go zaszyfrujesz, gdzie przechowujesz klucz, aby go odszyfrować?
Jedyny sposób, w jaki widzę, aby nie wprowadzać luk w zabezpieczeniach, to usunięcie funkcji autologin i zmuszenie użytkownika do wpisania hasła za każdym razem, gdy chce skorzystać z usługi, ale jest to walka o użyteczność i użytkownicy są zepsute, że nie będą musieli tego robić.
Co mogę przeczytać na temat bezpiecznego przechowywania lokalnych poświadczeń w celu wdrożenia funkcji automatycznego logowania? Jeśli zasady są zbyt proste dla całego artykułu, jakie one są? Oprogramowanie, o którym mowa, nie powinno zależeć od funkcji nieobecnych na wszystkich platformach (takich jak „pęku kluczy”, które mają niektóre dystrybucje linuksa).
Odpowiedzi:
Jednym ze sposobów jest:
W zależności od tego, jakiego frameworku używasz do tworzenia witryny, takie zachowanie może być dostępne jako funkcja wbudowana.
Zauważ, że ponieważ protokół HTTP i tak jest bezstanowy, tak naprawdę nie ma funkcjonalnej różnicy między utrzymywaniem kogoś zalogowanego podczas jednej sesji korzystania ze strony internetowej a „automatycznym logowaniem” przy następnym użyciu strony; zależy tylko od tego, ile czasu pozostało do wygaśnięcia sesji.
Aktualizacja: Oczywiście użyj HTTPS dla zwiększenia bezpieczeństwa.
Aktualizacja 2: Pamiętaj, że to podejście ma ograniczenia, ponieważ nie działa dobrze dla użytkowników, którzy często zmieniają adres IP. Zapewnia jednak wyższy poziom bezpieczeństwa i może być przydatny w niektórych sytuacjach.
źródło
Amazon (i wiele innych) stosuje podejście hybrydowe. Zapewniają one automatyczne przeglądanie, dodawanie produktów do koszyka i składanie zamówień przy użyciu kombinacji adresów pod opieką / adresu wysyłki, które były używane wcześniej. Wymagają one jednak podania hasła do wielu działań, takich jak dodawanie kart kredytowych, dodawanie / zmiana adresów wysyłki, aktualizacja haseł, przeglądanie wcześniejszych zamówień (opcjonalnie dla użytkownika) i wiele innych ustawień konta.
Tak, ludzie, którzy uzyskają dostęp do twojego komputera, mogą przejąć twoją sesję, ale nadal dostajesz to, co zamawiają! (Co ważniejsze, motywacja do przejęcia sesji jest prawie całkowicie zanegowana.) Ale jeśli ktoś ma dostęp do mojego komputera, mam większe problemy niż ludzie kradnący przeciętne sesje witryny.
Jeśli masz części aplikacji, które nie wymagają tak wysokiego poziomu bezpieczeństwa, możesz wybrać model hybrydowy, w którym przechowujesz identyfikator sesji (skrót lub cokolwiek, jeśli chcesz), aby automatycznie logować użytkowników do części witryny o niskim poziomie bezpieczeństwa , ale wymagają od nich podania hasła po wejściu do obszarów o wyższym poziomie bezpieczeństwa i usunięcia tokena o wysokim poziomie bezpieczeństwa po zakończeniu sesji.
Oczywiście, jeśli jest to strona na poziomie bankowym, automatyczne logowanie nie jest opcją. Ponownie, witryny korzystające z tego rodzaju zabezpieczeń przyjmują wartość danych, które chronią, a dodatkowa wygoda dla użytkownika waży potencjalne ryzyko przejęcia sesji. Jeśli uważasz, że nie dotyczy to Twojej aplikacji, nie wdrażaj automatycznego logowania. Musisz uzyskać dostęp do tego, jaki poziom kompromisów w zakresie bezpieczeństwa / użyteczności jest odpowiedni dla danego przypadku użycia.
źródło
To nie jest wcale takie trudne. Najpierw zapisz plik cookie w tym formacie:
Możesz użyć skrótu sha1 dla tokena. Następnie w identyfikatorze użytkownika sklepu z pamięcią tabeli baz danych Remember_me_tokens znajduje się skrót bcrypt tokena i godzina wygenerowania tokena.
Następnie, gdy ktoś odwiedza Twoją witrynę, sprawdź, czy plik cookie jest ustawiony. Jeśli plik cookie jest ustawiony, sprawdź, czy w bazie danych jest prawidłowy wiersz w ciągu ostatnich 7 dni. Jeśli w bazie danych znajduje się poprawny wiersz dla pliku cookie, ustaw sesję, aby wskazać, że użytkownik jest zalogowany, a także usuń dopasowany wiersz pliku cookie / bazy danych i wygeneruj nowy wiersz pliku cookie / tokena / bazy danych.
Jeśli się wylogują, usuń plik cookie.
Uruchom zadanie cron, aby przyciąć Remember_me_tokens, które są starsze niż powiedzmy 7 dni.
źródło
Możesz to zrobić tylko wtedy, gdy ufasz urządzeniu, w którym je przechowujesz. To, czy jest ono bezpieczne, zależy od użytkownika (jeśli nie możesz wpłynąć na urządzenie). To jest po prostu z twoich rąk.
Jak stwierdzono w komentarzach:
źródło