ASP.NET中的会话并未经过身份验证 - 身份验证完全是分开的。通过获取会话cookie并重新创建它,您可以劫持会话;如果您提取身份验证cookie,则可以作为用户进行身份验证(这就是为什么默认情况下,身份验证cookie会过期的原因)- 请参见http://msdn.microsoft.com/en-us/library/ms178581.aspx。安全提示非常清晰:SessionID值以明文形式发送,无论是作为cookie还是作为URL的一部分。恶意用户可以通过获取SessionID值并将其包含在对服务器的请求中来访问另一个用户的会话。如果您在会话状态中存储敏感信息,则建议使用SSL加密浏览器和服务器之间包括SessionID值在内的任何通信。
在我的上一份工作中,我们通过跟踪用户的会话ID(我们将guid作为查询字符串附加到URL中,还有其他方法)来解决这个问题,并将发出请求的IP地址存储在数据库中。对于所有后续请求(任何具有会话ID的内容,需要获取任何敏感信息),我们只需检查会话ID和发出请求的IP是否与我们在身份验证和设置会话时存储的值相匹配。Request.UserHostAddress比较难伪造。虽然存在一些开销,但它比cookie更安全。