2012-06-09 15 views
9

Jest to gałąź innym pytaniem: What is the best way to implement "remember me" for a website?Pozostań zalogowany Najlepsze wskazówki: w jaki sposób nazwa użytkownika w pliku cookie zwiększa bezpieczeństwo?

Górny odpowiedź jest wdrożenie tego: http://jaspan.com/improved_persistent_login_cookie_best_practice

Podsumowanie:

Użyj liczbę losową jako seria Token, a inny jako token logowania. Umieścić je w pliku cookie Stay Stay, wraz z nazwą użytkownika. Przypisanie drugiego, normalnego pliku cookie sesji. Za każdym razem, gdy użytkownik dotrze do użytkownika bez pliku cookie sesji, zużyje plik cookie Stay Logged In. Wydaj nowy, tym razem z nowym losowym tokenem logowania, zachowując token Serii .

Dlaczego warto podać nazwę użytkownika? Jak to pomaga? Token Series powinien wystarczyć do zidentyfikowania użytkownika i serii. Token Series został dodany w tym podejściu, aby zapobiec atakowi DoS, w którym osoba atakująca po prostu zgaduje wszystkie nazwy użytkowników i jednocześnie uderza w witrynę, rejestrując wszystkich. Ale dlaczego ma sens pozostawienie nazwy użytkownika w ogóle?

+2

AFAICT w tym nazwa użytkownika robi dwie rzeczy. Po pierwsze, utrudnia DoS zapamiętanie loginu przez wysyłanie losowych Tokenów. (DoS powiedzie się tylko wtedy, gdy odgadniesz poprawny Token Serii _i jego powiązaną nazwę użytkownika.) Po drugie, nazwa użytkownika broni przed niewinnymi kolizjami między Tokenami Serii wydanymi różnym użytkownikom. Bez nazwy użytkownika kolizja Tokenów seryjnych wyglądałaby jak wskazówka kradzieży. Oczywiście, jeśli możesz zagwarantować, że każdy nowy Token Serii będzie unikalny spośród wszystkich wciąż ważnych, wcześniej wydanych Tokenów Series, to nie jest to problem. – ottomeister

+0

Ma to jak na razie największy sens. W bardzo rozproszonym systemie, w którym sprawdzanie unikalności dla Tokenów Series nie jest wydajne, rozumiem, dlaczego należy podać nazwę użytkownika lub, co wolę, skrót nazwy użytkownika. Ale jeśli Tokeny Series są unikatowe, równie dobrze mogą odjąć nazwę użytkownika od potencjalnych napastników. –

+0

Czy nie lepiej używać identyfikatora użytkownika zamiast nazwy użytkownika ze względu na wydajność porównywania liczb całkowitych vs. ciągów znaków? – axelbrz

Odpowiedz

0

Nazwa użytkownika i numer są wyszukiwane jako para na serwerze przed wydaniem nowego pliku cookie sesji. Bez nazwy użytkownika byłoby to mniej bezpieczne (można powtórzyć użycie przy użyciu innego użytkownika, jeśli ukradłbyś numer) i trudniej go wyszukać.

+3

1) Nie jest trudniej szukać. Token serii to unikalny numer, czyli tanie wyszukiwanie. 2) Jak mógł powtórzyć się z innym użytkownikiem? Mają inny token szeregowy.Gdy żeton serii zostanie odwołany z powodu nieudanego ataku, żeton serii jest tak samo użyteczny jak liczba losowa. –

0

Zgaduję:

Nazwa użytkownika służy do kontroli. Jeśli chcesz, aby klient wysłał go razem z tokenem w celu uwierzytelnienia, wiesz, który użytkownik próbuje się uwierzytelnić. To pozwala ci reagować w jakiś rozsądny sposób na to, że token jest niewłaściwy.

Jeśli poprosisz o token tylko podczas uwierzytelniania, nie wiesz, który użytkownik faktycznie go próbuje, a podczas meczu przyznaje dostęp do kogoś, ale nie może nic zrobić w przypadku niepowodzenia. Ktoś może po prostu spróbować na ślepo zająć się nimi.

Mając to na uwadze, załóżmy, że decydujemy się na używanie zarówno nazwy użytkownika, jak i tokena. Teraz, jeśli token jest nieprawidłowy, możemy usunąć wszystkie inne tokeny dla tego użytkownika. Ale to otwiera system na DOS. Osoba atakująca może wylogować się z dowolnej osoby. Tak więc dla tej serii jest dodawany.

Nie musi to być nazwa użytkownika, niektóre inne informacje, które pozwolą zidentyfikować użytkownika, również będą działać.

Powiązane problemy