我的理解是 ASP 生成一个 cookie 来验证会话。但是,如果该 cookie 通过非 https 通道来回发送,我不能简单地通过欺骗 cookie 来欺骗它吗?cookie 可以锁定到特定的 IP 或其他机器指纹吗?
2 回答
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 更安全。