是否有足够的会话cookie来存储用户ID?

问题描述:

我使用的会话cookie(而不是永久性)保存用户ID知道,如果用户登录。是否有足够的会话cookie来存储用户ID?

基本上,用户登录时,我们检查的凭据,然后设置一个会话cookie的用户ID = 37(这个特定的用户,其他用户将有73或69等)

Session.Add("UserID", 37); 

我的问题是,是否有可能登录的用户到该会话cookie以某种方式改变从37到73并因此欺骗服务器认为他实际上是用户73? 如果是,那么我在做什么错,如何处理这种情况?它似乎疯了放在会话用户名和密码哈希,并检查他们每次?

我们也是后来使用的查询,这个用户ID值来限制他们。

我很抱歉,如果这不是一个确切的代码的问题,但它是非常相关的我的代码。

会话cookie只包含会话ID。它用于识别用户。它仅包含其他内容。此会话的实际信息存储在服务器上。所以这是安全的。用户永远不能更改已存储在服务器上的值。如果您将此存储在会话中,则用户无法更改其ID。

这就是说,与用户ID打交道时,你可以考虑使用forms authentication跟踪验证的用户,而不是与会话重塑车轮。

+0

哦。我懂了。你是如此的正确。我完全忘记了这一点。对于快速的答案thnx很多。我必须等12分钟才能接受,但我会。 – b0x0rz 2012-04-25 14:12:20

+0

如果该值存储在服务器上,则当客户端关闭浏览器时会话实际上被删除,还是仅仅是密钥? (不知道我是否使用了正确的名字) – BjarkeCK 2012-12-01 15:10:31

+0

@BjarkeCK,关键在客户端。在一个cookie中。会话cookie不是持久的,所以当用户关闭浏览器时,cookie将会丢失。另一方面,该值将继续存在于服务器上,直到它被垃圾收集为止。 – 2012-12-01 17:11:55

这不是cookie,并且是完全安全的,因为它不能被用户改变。在cookie中存储在服务器端的唯一东西是会话ID。

ASP.NET会话状态相比客户端状态管理技术提供了一个重要的安全优势,因为的实际状态存储在服务器端,而不是沿着HTTP请求路径在客户端和其他网络实体上公开。但是,为了维护应用程序安全性,需要考虑会话状态操作的几个重要方面。 安全最佳实践可分为三大类:防止会话ID欺骗和注射,在后端固定状态存储,并确保在专用或共享环境中的会话状态部署的安全性。

阅读:Securing Session State

+0

是的,所有涵盖:)希望;) – b0x0rz 2012-04-25 14:25:45

至于其他的答案已经注意到,实际值(37中的例子)存储在服务器,而不是客户端,但是,这并不意味着你是免疫潜在的攻击。这种机制仍然容易受到跨站点脚本攻击。基本上,存储在客户端Cookie上的是一些很长的标识符。如果除实际用户以外的人获得该标识符的标识,他们可以将其放入他们自己的cookie中,并基本上假装为该用户。您可以自行研究跨站点脚本(我不是这方面的专家),以查看恶意用户尝试查看其他用户的Cookie并尝试将其设置为自己的一些常见方式,以及防御此类攻击的方法(其中一些我肯定会通过浏览器和ASP为您完成)。