2013-02-18 22 views
6

私が理解しているところでは、ServiceStackのAuthenticationを使用するときは、通常、セッションの開始時に認証し、サーバー側のセッションを認証済みとしてマークします。後続のWebサービス要求はそのセッションIDを使用し、再認証は必要ありません。 (私がこれまでに間違っていたら私を修正してください)。ServiceStackのセッションIDは安全ですか?

SessionExtensions.csのGuid.NewGuid()を使用して新しいセッションIDの生成が行われます。これはdoesn't generate cryptographically fantastic valuesです。暗号で安全な値を使用するように切り替える理由はありませんか? RNGCryptoServiceProviderを使用していますか?

UPDATE:

実際には、ビットさらにそれについて考えた後、ASP.NETは、要求者が認証されていることを確認するために、そのセッションIDを使用していません。マシンキーで暗号化され、ASP.NET 2.0のプロセスのhere's a nice descriptionをハッシュしたFormsAuthenticationTicketを使用します。

私はセキュリティの仲間ではないので、ASP.NETフォーム認証によって提供されるセキュリティレベルとランダム値で提供されるセキュリティレベルを比較する場合、このことの意味はわかりません。私はそれがすべてキーとデータの長さになると思うが、フォーム認証にブルートフォース攻撃を仕掛けるのに必要な時間は、乱数のヒープ全体を試す必要がないため、おそらくもっと高いだろうか?

答えて

7

ServiceStackは、すべてのWebフレームワークで共通のアプローチである、後続の要求に対して認証されたセッションを設定するためのAuthenticating + SetセッションCookieの標準HTTPアプローチを使用します。

.NETの脆弱性から、GUIDを予測してリバースエンジニアリングすることはできませんでしたが、it appears ASP.NET独自のSessionIdはGuid(2^120対2^128エントロピーのビット)。しかし、本当にランダムではないので、次のリリースで本当にランダムな識別子を使用するようにServiceStackの実装を変更します。

+0

ASP.NETは認証にSessionIdsを使用せず、FormsAuthenticationTicketsを暗号化してハッシュしていることに気付きました。セキュリティの比較に関する考え?痛みになりたくはありませんが、このフレームワークを快適に選択できるようにするには、これが重要です。 – Rory

+0

何かを完了させる最も速い方法は、プルリクエストを送信することです。さもなければ、私たちはそれを行う自由な時間が来るまで待たなければなりません。この週末のリリース(v3.9.38 +)の前にこれを見ていきますが、約束はありません。 – mythz

+3

ServiceStackのFYI v3.9.38 +が[このコミットで見られるように] RNGCryptoServiceProviderを使用するように更新されました(https://github.com/ServiceStack/ServiceStack/commit/4235f0b11ff6ee9a6f49c49edacb4363684291e2) – mythz