根据我的理解,当使用ServiceStack的Authentication时,您通常会在会话开始时进行身份验证,然后将服务器端的会话标记为已通过身份验证。后续Web服务请求将使用该会话ID,而不需要重新身份验证。 (如果到目前为止我错了,请纠正我)。
使用SessionExtensions.cs中的doesn't generate cryptographically fantastic values中的Guid.NewGuid()执行新会话ID的生成。是否有任何理由不切换使用加密安全值,例如使用RNGCryptoServiceProvider?
更新:
实际上,在进一步考虑之后,ASP.NET不会使用其会话ID来确认请求者是否经过身份验证。它使用FormsAuthenticationTicket,它已使用机器密钥加密并对ASP.NET 2.0的进程进行了散列(here's a nice description)。
我不是安全人员所以如果您要比较ASP.NET Forms Auth提供的安全级别和随机值提供的安全级别,我不知道这有什么影响。我想这一切都归结为密钥和数据长度......但是,对表单身份验证进行暴力攻击所需的时间可能要高得多,因为它不需要只尝试一大堆随机数?
答案 0 :(得分:7)
右ServiceStack使用Authenticating + Set会话cookie的标准HTTP方法为后续请求设置经过身份验证的会话,这是跨所有Web框架的常用方法。
虽然我从来没有听说过.NET中的漏洞能够预测和反向设计GUID,it appears ASP.NET自己的SessionId不如Guid强(2 ^ 120 vs 2 ^ 128位熵)。但鉴于它并非真正随机,我们将改变ServiceStack的实现,以便在下一个版本中使用真正的随机标识符。