ServiceStack会话ID是否足够安全?

Ror*_*ory 6 .net security guid servicestack

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

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

更新:

实际上,在进一步考虑之后,ASP.NET不会使用其会话ID来确认请求者是否经过身份验证.它使用FormsAuthenticationTicket,它已经用机器密钥加密并进行了散列(这里是对ASP.NET 2.0进程的一个很好的描述).

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

myt*_*thz 7

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

虽然我从来没有听说过.NET中的漏洞能够预测和反向设计GUID,但是看起来 ASP.NET自己的SessionId不如Guid强(2 ^ 120 vs 2 ^ 128 bit熵) ).但鉴于它并非真正随机,我们将改变ServiceStack的实现,以便在下一个版本中使用真正的随机标识符.

  • FYI v3.9.38 + ServiceStack已更新为使用RNGCryptoServiceProvider [见此提交](https://github.com/ServiceStack/ServiceStack/commit/4235f0b11ff6ee9a6f49c49edacb4363684291e2) (3认同)