7

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

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

Session.Add("UserID", 37);

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

我们稍后也在查询中使用此用户 ID 值来限制它们。

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

4

4 回答 4

6

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

话虽如此,在处理用户 ID 时,您可以考虑使用表单身份验证来跟踪经过身份验证的用户,而不是使用 Session 重新发明轮子。

于 2012-04-25T14:10:39.223 回答
3

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

阅读:保护会话状态

于 2012-04-25T14:19:53.057 回答
2

那不是 cookie,并且是完全安全的,因为它不能由用户更改。cookie 中唯一存储在服务器端的是会话 ID。

于 2012-04-25T14:11:11.503 回答
0

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

于 2012-04-25T14:37:18.787 回答