会话cookie安全到足以存储用户ID?

时间:2012-04-25 14:09:31

标签: c# security session

我正在使用会话cookie(不是永久cookie)来保存用户ID以了解用户是否已登录。

基本上,用户登录,我们检查凭据,然后设置会话cookie userID = 37(对于这个特定用户,另一个用户将有73或69等...)

Session.Add("UserID", 37);

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

我们稍后会在查询中使用此userid值来限制它们。

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

4 个答案:

答案 0 :(得分:6)

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

这就是说,在处理用户ID时,您可以考虑使用forms authentication来跟踪经过身份验证的用户,而不是使用Session重新发明轮子。

答案 1 :(得分:3)

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

阅读:Securing Session State

答案 2 :(得分:2)

这不是cookie,并且非常安全,因为用户无法更改。存储在cookie中的服务器端唯一的东西是会话ID。

答案 3 :(得分:0)

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