6

据我了解,在使用 ServiceStack 的身份验证时,您通常会在会话开始时进行身份验证,然后将服务器端的会话标记为已通过身份验证。随后的 Web 服务请求将使用该会话 ID,并且不需要重新验证。(到目前为止,如果我错了,请纠正我)。

新会话 id 的生成是使用SessionExtensions.cs中的 Guid.NewGuid() 执行的,它不会生成加密的奇妙值。是否有任何理由不切换到使用加密安全值,例如使用RNGCryptoServiceProvider

更新:

实际上,在进一步考虑之后,ASP.NET 并没有使用它的 Session Id 来确认请求者是经过身份验证的。它使用一个 FormsAuthenticationTicket,它已经用机器密钥加密并散列(这里是 ASP.NET 2.0 过程的一个很好的描述)。

我不是安全专家,所以如果您要比较 ASP.NET Forms Auth 提供的安全级别和随机值提供的安全级别,我不知道这意味着什么。我想这一切都归结为密钥和数据长度......但对表单身份验证进行暴力攻击所需的时间可能要高得多,因为它不需要只尝试一大堆随机数?

4

1 回答 1

7

Right ServiceStack使用 Authenticating + Set session cookie 的标准 HTTP 方法来为后续请求设置经过身份验证的会话,这是所有 Web 框架的通用方法。

尽管我从未听说过 .NET 中存在能够预测和反向工程 GUID 的漏洞,但似乎ASP.NET 自己的 SessionId 不如 Guid 强(2^120 对 2^128 位熵)。但鉴于它不是真正随机的,我们将在下一个版本中更改 ServiceStack 的实现以使用真正随机的标识符。

于 2013-02-18T22:25:34.870 回答