【问题标题】:is session cookie secure enough to store userid?会话 cookie 是否足够安全以存储用户 ID?
【发布时间】:2012-05-06 05:51:04
【问题描述】:

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

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

Session.Add("UserID", 37);

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

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

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

【问题讨论】:

    标签: c# security session


    【解决方案1】:

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

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

    【讨论】:

    • 哦。我知道了。你说得对。我完全忘记了这一点。非常感谢快速回答。我必须等待 12 分钟才能接受,但我会的。
    • 如果值存储在服务器上,客户端关闭浏览器时会话实际上是删除的,还是只有键? (不知道我是否使用了正确的名称)
    • @BjarkeCK,密钥在客户端。在饼干里。会话 cookie 不是持久的,因此当用户关闭浏览器时,cookie 将丢失。另一方面,该值将继续存在于服务器上,直到它被垃圾回收。
    • 请告诉我使用表单身份验证比Session 更安全?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      阅读:Securing Session State

      【讨论】:

      • 是的,所有内容都涵盖了 :) 希望 ;)
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2013-02-03
        • 2013-03-02
        • 2013-09-20
        • 2018-05-10
        • 1970-01-01
        • 2015-06-06
        • 1970-01-01
        • 2021-04-14
        • 1970-01-01
        相关资源
        最近更新 更多