2013-02-18 9 views
6

Z tego co rozumiem, przy korzystaniu z ServiceStack's Authentication zwykle uwierzytelnisz się na początku sesji, a następnie oznaczysz sesję po stronie serwera jako uwierzytelnioną. Kolejne żądania usługi internetowej będą używać tego identyfikatora sesji i nie będą wymagały ponownego uwierzytelniania. (Proszę mnie poprawić, jeśli się mylę).Czy identyfikatory sesji usługi ServiceStack są wystarczająco bezpieczne?

Generowanie nowych identyfikatorów sesji jest wykonywane przy użyciu Guid.NewGuid() w SessionExtensions.cs, które doesn't generate cryptographically fantastic values. Czy jest jakikolwiek powód, aby nie przełączać się na używanie kryptograficznie bezpiecznych wartości, np. używając RNGCryptoServiceProvider?

UPDATE:

Właściwie po myślenia o nim nieco dalej, ASP.NET nie używa jej identyfikator sesji, aby potwierdzić, że żądający jest uwierzytelniona. Korzysta z formularza FormsAuthenticationTicket, który został zaszyfrowany kluczem komputera i zaszyfrowany (here's a nice description procesu dla programu ASP.NET 2.0).

Nie jestem facetem bezpieczeństwa, więc nie wiem, co to oznacza, jeśli porównasz poziom zabezpieczeń zapewniany przez ASP.NET Forms Auth z wartością losową. Przypuszczam, że wszystko sprowadza się do klucza i długości danych ... ale również czas wymagany do zamontowania ataku brute-force na Forms Authentication jest prawdopodobnie znacznie wyższy, ponieważ nie wymaga on po prostu próbowania całej liczby losowych liczb?

Odpowiedz

7

Prawo ServiceStack używa standardowego podejścia HTTP z Uwierzytelniania + Ustaw plik cookie sesji, aby skonfigurować uwierzytelnioną sesję dla kolejnych żądań, co jest powszechnym podejściem do wszystkich frameworków internetowych.

Chociaż nigdy nie słyszałem o luce w zabezpieczeniach platformy .NET przed możliwością przewidywania i odtwarzania kodu GUID, it appears, że wartość identyfikatora SessionId w ASP.NET nie jest tak silna jak w Guid (2^120 vs 2^128 bitów entropii). Ale biorąc pod uwagę, że nie jest to całkowicie losowe, zmienimy implementację ServiceStack, aby używał prawdziwie losowego identyfikatora w następnej wersji.

+0

Po prostu zdałem sobie sprawę, że ASP.NET nie używa identyfikatorów SessionIds do uwierzytelniania, ale raczej zaszyfrowanych i zakodowanych formularzy FormsAuthenticationTickets. Wszelkie przemyślenia na temat porównania bezpieczeństwa? Nie chcąc być bólem, ale jest to dla nas ważne, aby móc wygodnie wybrać tę strukturę. – Rory

+0

Najszybszym sposobem na zrobienie czegoś jest wysłanie prośby o pobranie. W przeciwnym razie będzie musiało poczekać, aż będziemy mieli wolny czas, aby to zrobić. Przyjrzę się temu przed wydaniem tego weekendu (v3.9.38 +) - ale bez obietnic. – mythz

+3

FYI v3.9.38 + z ServiceStack został zaktualizowany do używania RNGCryptoServiceProvider, jak widać [w tym zatwierdzeniu] (https://github.com/ServiceStack/ServiceStack/commit/4235f0b11ff6ee9a6f49c49edacb4363684291e2) – mythz