2013-09-22 21 views
5

Ja próbuje wdrożyć „zapamiętaj mnie” Program narzędziowy użyciem systemu przedstawionego tutaj: Improved persistent login cookiewykonawcze zapamiętaj mnie z tokena i serii na wielu urządzeniach

Jednak istnieje problem z logiką tutaj dla mnie i zastanawiałem się, czy każdy może to dla mnie wyjaśnić.

  • Użytkownik otrzymuje identyfikator sesji. Jest to losowo generowany ciąg i jest on trwały przez cały okres istnienia konta użytkownika.

  • Użytkownik otrzymuje identyfikator tokenu. To jest generowany losowo ciąg i jest odtwarzany za każdym razem, gdy użytkownik loguje się powodzeniem.

Obie te wartości są przechowywane w postaci podpisanych cookie na komputerze użytkownika oraz w bazie danych.

Pomysł polega na tym, że jeśli ktoś sfałszy token użytkownika i serię oraz zaloguje się jako użytkownik, wygeneruje nowy token ID. Następnym razem, gdy prawowity użytkownik spróbuje się zalogować, otrzyma pasujące serie, ale nieważny token informujący system, że doszło do naruszenia bezpieczeństwa i możliwe jest podjęcie wszelkich niezbędnych działań (wyczyszczenie tokena użytkownika).

To jest świetne. Co jednak dzieje się, gdy użytkownik próbuje użyć mojej aplikacji z wielu urządzeń lub przeglądarek? Powiedz, że użytkownik loguje się do mojej usługi w Chrome i sprawdza, czy pamiętam. Następnym razem, gdy logują się za pomocą przeglądarki Firefox, a także wybiorą, zapamiętaj mnie. Zostanie wygenerowany nowy token, aby następnym razem, gdy użytkownik spróbuje zalogować się w Chrome, zostanie wywołana fałszywa kradzież - nie?

Jeśli tak, to w jaki sposób mogę bardziej niezawodnie wdrożyć to rozwiązanie? Doskonale zdaję sobie sprawę, że autoryzacja oparta na plikach cookie jest z natury mniej bezpieczna i nie zezwala autoryzowanemu użytkownikowi plików cookie na żadne szkodliwe działania, takie jak zakupy.

Odpowiedz

4

oryginalny post, że „Lepsza trwałe logowanie cookies” odnosi się (tutaj: http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/) stwierdza:

cookie powinien składać się z nazwy użytkownika użytkownika, a następnie znak separatora, a następnie przez kilka duża liczba losowa (128 bitów wydaje się zdumiewająco duża, aby była akceptowalna). Serwer przechowuje tabelę z numerami-> nazwy użytkownika, które są sprawdzane, aby zweryfikować ważność pliku cookie. Jeśli plik cookie zawiera liczbę losową i nazwę użytkownika , które są odwzorowane na siebie w tabeli, login jest akceptowany jako .

W każdej chwili, nazwa użytkownika może być przypisane do kilku takich numerach

Tak, użytkownik może mieć wiele trwałe znaki w tym samym czasie.

+1

Dzięki temu ma to teraz sens. Będę miał mnóstwo tokenów i przyznam im 30-dniowy okres wygaśnięcia przy braku użycia, więc nie wypełniam bazy danych nadmiarowymi danymi. –