2009-09-11 14 views
11

Co najlepiej przechowywać w pliku cookie, aby zachować stały stan logowania?Co powinno być przechowywane w pliku cookie dla systemu logowania?

Widziałem wiele stron internetowych (i tutoriali dla początkujących!), Które po prostu przechowują coś takiego jak validUser = 1 w pliku cookie. Najwyraźniej mógłbym podszyć się pod tę stronę, a witryna uznałaby mnie za ważnego użytkownika.

Jeśli nazwa użytkownika jest przechowywana w pliku cookie, mógłbym maskować jakikolwiek użytkownik, wysyłając plik cookie ze swoją nazwą użytkownika w moim żądaniu.

Jeśli więc przechowujesz w pliku cookie nazwę użytkownika i, to muszę znać nazwę użytkownika i hasło, aby się zalogować. Skutecznie użytkownik jest zalogowany automatycznie - to tak, jakby hasło zostało zapisane przez jego przeglądarkę. Zamiast wpisywać poświadczenia w samych polach za każdym razem, przeglądarka automatycznie wysyła je po każdym żądaniu strony.

Ale czy to nadal zły pomysł? Przechowywanie hasła w postaci zwykłego tekstu nie jest genialnym pomysłem, ale w ten sposób będzie wysyłane w danych POST podczas logowania. Poza tym może być przechowywane w postaci zakodowanej. Ale nadal nie czuję się z tym dobrze.

Być może pliki cookie nie powinny być używane do przechowywania niczego poza identyfikatorem sesji, a dane użytkownika są przechowywane na serwerze. Być może jest to bezpieczniejsze miejsce, zakładając, że serwer nie jest udostępniany.

Patrząc na niektóre oprogramowanie typu open source, takie jak oprogramowanie forum, używają one bardziej skomplikowanego systemu, ale nie mogłem dokładnie zrozumieć, co robił, przeglądając kod.

Co to jest standardowa "najlepsza praktyka"?

+1

Czy to tak proste, jak zapisanie w sesji użytkownika identyfikatora użytkownika? To jest bezpieczne i nie ma potrzeby przechowywania dalszych informacji o konkretnym loginie w bazie danych? (np. IP) i zmienić całą sesję/dane za każdym razem, gdy się pojawią, jak widziałem, robiąc to duże skrypty? – Rob

+0

Powinieneś ponownie użyć istniejącego środowiska uwierzytelniania, gdy tylko jest to możliwe, ponieważ naprawdę jest skomplikowany. Na przykład spójrz na https://github.com/delight-im/PHP-Auth – caw

Odpowiedz

6
+0

Drugi link jest teraz uszkodzony. –

+0

@DrTwox It's up now. –

+6

Odpowiedzi zawierające tylko linki nie są dobrymi odpowiedziami. Ta odpowiedź powinna zostać zredagowana, aby zawierała podsumowanie powiązanych artykułów. (Tak, wiem, że to już bardzo stara odpowiedź.Jednak komentarz dotyczący zerwanego łącza doskonale ilustruje potrzebę podsumowania linków.) –

3

Najlepsza praktyka byłoby użyć SESSION zamiast ciasteczko za wykorzystywanie danych. Pliki COOKIES służą do przechowywania ogólnych informacji, a nie konkretnych informacji o użytkowniku, do tego służą SESJE.

0

Najlepszą praktyką jest przechowywanie losowo generowanego identyfikatora sesji. Sesja przechowuje następnie identyfikator użytkownika lub cokolwiek innego, co jest potrzebne do przechowywania. W PHP metoda session_start() automatycznie generuje identyfikator sesji i plik cookie o nazwie PHPSESSID, więc musisz tylko martwić się o przechowywanie danych w tablicy $ _SESSION, a nie w pliku cookie.

0

Jedyną rzeczą, która powinna być w ciasteczku jest sessionid generowany przez PHP (i robi się to automatycznie podczas korzystania z sesji). Nie przechowuj niczego w ciasteczku z wyjątkiem może pamiętanej nazwy użytkownika w celu zaznaczenia pola wyboru "zapamiętaj mnie".

Powiązane problemy