2011-11-25 8 views
10

Jeśli chodzi o zapamiętaj ciasteczka, są 2 różne podejścia:Hashe lub tokeny na pliki cookie "remember me"?

Hashe
zapamiętaj cookies przechowuje ciąg znaków, który może zidentyfikować użytkownika (czyli identyfikator użytkownika) oraz ciąg może udowodnić, że zidentyfikowany użytkownik jest tym, za kogo się podaje - zwykle hash oparty na haśle użytkownika.

Żetony
zapamiętaj cookies sklepów losowy (bez znaczenia), jednak unikalny ciąg znaków, który odpowiada z rekordu w tokenów tabeli, który przechowuje identyfikator użytkownika.

Które podejście jest bezpieczniejsze i jakie są jego wady?

+6

Intuicja sugeruje, że jednorazowe ciągi losowe muszą być bezpieczniejsze niż ciągi deterministyczne tworzone przez algorytm, ale przypuszczam, że chcesz pewnych odniesień. A intuicja nie zawsze ma rację. –

+0

Dlaczego jest to oznaczone jako Ruby? –

+1

Dla każdego, kto to znajdzie, przeczytaj: [Trwałe logowanie - najlepsze praktyki] (http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/).Zasadniczo musisz również zaszyfrować tokeny w taki sam sposób, jak hash hasłem. –

Odpowiedz

9

Powinieneś używać losowo wygenerowanych żetonów, jeśli to możliwe. Oczywiście wadą jest to, że trzeba napisać dodatkowy kod do przechowywania i używać ich po stronie serwera, więc może to nie być uzasadnione dla wszystkich aplikacji internetowych. Ale z punktu widzenia bezpieczeństwa, ma wyraźne zalety:

  1. Osoba atakująca nie może generować tokeny z identyfikatorów użytkowników, ale może on zdecydowanie generowania skrótów. To duży problem, nawet jeśli używasz soli podczas generowania haszysz (i powinieneś), twoi użytkownicy są wkręcani, jeśli sól dostanie się w niepowołane ręce.

  2. Podanie tych tokenów umożliwia użytkownikom (lub administratorowi) wylogowanie się z określonych sesji, których mogą chcieć się pozbyć. To jest naprawdę fajna funkcja, na przykład Google i Facebook.

Tak więc, jeśli masz czas i budżet: tokeny, absolutnie.

1

Taki żeton byłby bezpieczniejszy, gdyby za każdym razem tworzył losowy ciąg znaków.

Z drugiej strony, pamiętajcie, że użytkownik nie musi się ponownie logować, więc jeśli nie kliknie przycisku wylogowania, rzadko będzie konieczne ponowne wygenerowanie nowego tokena, chyba że wygasa.

Chyba należy trzymać z żetonami i nie rezygnować z bezpieczeństwa dla lazyness :-P

4

Zazwyczaj zachować token -> Mapowanie użytkownik zabezpieczyć po stronie serwera. W związku z tym twoje bezpieczeństwo opiera się na utrzymaniu tokena w bezpiecznym miejscu i zapewnieniu, że jego czas życia jest kontrolowany (np. Wygasa i/lub jest ważny tylko wtedy, gdy otrzymasz go z tego samego adresu IP, co używany przez pierwotnego dostawcę referencji - ponownie, tylko przykład)

Security of token based authentication

Nadzieja to pomaga.

Powiązane problemy