gpt4 book ai didi

c# - 创建新 session ID(无缝 ID 传输)

转载 作者:太空狗 更新时间:2023-10-29 20:40:21 24 4
gpt4 key购买 nike

所以我遇到了一个有趣的问题,即在登录/更改访问级别等之后实现 session ID 滚动。

登录时,我目前正在尝试使用 SessionIDManager 生成一个新的 session ID,但这只会更改 cookie header ,不会换出 HttpContext 中的 session ,因此我会向 session 添加其他详细信息(将用户绑定(bind)到 session ID 的各种细节),他们会立即迷路(更不用说旧 session 被放弃了)。

为了防止 session 劫持(通过存储主要的非 SSL 通信)和 session 固定,我们应该在登录时生成一个新的 session ID,但 Microsoft 似乎不允许您这样做(grr,这么多阅读-只有变量和没有构造函数的密封类)。我可以迁移后端 SQL 中的所有数据,但这似乎有点“肮脏的技巧”。

关于如何正确执行此操作的任何想法?

编辑:

我发现的实现:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

session 仍然是旧 session ,因此在下一页上,所有更改都将丢失。

SessionIDManager 在 SaveSessionID 之后不返回 session 对象,因此我无法向刚创建的 session 添加详细信息。在下一个页面加载时我可以,但旧 session 现在无法访问(并被放弃,但即使它没有被放弃......)。

HttpContext.Session 是只读的,即使不是,HttpSessionState 也没有构造函数。

编辑 2:

Session Fixation in ASP.NET

显然, session 固定和劫持在此之前已被讨论过,答案是“Microsoft 似乎不在乎”,两阶段修复实现不佳。

最佳答案

好吧,这有点问题,展示了如何使用此方法劫持基于 session 的身份验证和基于表单的身份验证(您需要一个有效的用户帐户,但您可以劫持其他人的 session ),有一些在线博客提示 session 固定和轻松利用劫持的能力。很明显这是一个大问题。 Yahia指出微软对 fixing this 不感兴趣.

我所做的是创建一个与 session ID 配对的真实性 key ,在登录时我们会生成一个新 key 并将其放入 session 中,如果 session 中有 key ,我们会为用户提供一个 cookie他们必须匹配,否则我们会踢用户(劫持企图)。这似乎是在提到的博客上执行此操作的常用方法(另一种方法是使用表单例份验证来基本上加密 cookie,虽然这很好用,但我希望该解决方案与多种类型的身份验证兼容)。


推荐的一件事可以帮助防止任何非 ssl 通信,方法是使用另一个应用程序作为仅服务 302 重定向的非 ssl 前端,如 Yahia 所推荐的那样,虽然这有助于防止 session ID 的泄露,但它需要对应用程序的部署方式进行大量重组才能修复,而 IMO:首先应该修复 .NET 的不确定 session 管理,并且我希望我们的应用程序从头开始就完全安全,不依赖于其他应用程序进行 302 重定向,这样任何信息泄漏都无关紧要,因为 cookie 会在登录时轮换。

关于c# - 创建新 session ID(无缝 ID 传输),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com