代码之家  ›  专栏  ›  技术社区  ›  now he who must not be named.

修改会话Id时会发生什么情况?

  •  1
  • now he who must not be named.  · 技术社区  · 7 年前

    我正在探索cookie和会话[我在ASP.NET C#microsoft framework中使用它们]

    了解会话和Cookie的工作原理 here here .

    我的看法是,

    1. 一旦用户登录并建立会话,他或她将获得会话id以进一步跟踪他们。

    2. 还有,这个 sessionId 可以存储在服务器上,如SQL Server或InProc,这意味着它存储在发布服务器或缓存Redis cache上。

    我的问题是,

    我可以理解 会话ID 存储在内存中,并作为HTTPHeader随每个请求一起发送(因为HttpSessions是无状态的)。

    1. 当我们谈论在内存中存储会话时,我们谈论的是哪个内存?
    2. 如果我们将它们存储在cookie中,如果我去修改cookie呢?
    3. 如果我可以修改它们,如果我更改 会话ID 并以新的 会话ID ?
    2 回复  |  直到 7 年前
        1
  •  1
  •   PSK    7 年前

    1、当我们谈论在内存中存储会话时,我们谈论的是哪个内存?

    Ans:InProc模式,将会话状态存储在Web服务器(RAM)的内存中。这是默认设置。

    如果我们将它们存储在cookie中,如果我去修改cookie会怎么样?

    Ans:只有会话id存储在cookie中。如果您不想使用Cookie进行会话跟踪,请使用asp。net framework还通过将其附加到URL中来支持它。如果更改cookie值,服务器将无法使用存储的会话数据识别请求。您需要了解http是一种无状态协议,sessionid是往返期间请求的浏览器标识符。如果更改cookie值,服务器将无法识别该请求。

    幸运的是,如果您提供了有效的sessionid,服务器将根据该id提供会话中存储的内容。这称为会话劫持

    https://en.wikipedia.org/wiki/Session_hijacking

    如果我可以修改它们,那么如果我更改sessionId并提供一个新的sessionId呢?

    答:如果您正在讨论系统的SessionId。网状物会话状态。无法更改,因为它是只读的。但您可以在客户端自由更改任何内容(Cookie或URL)

    命名空间 :系统。网状物会话状态

    装配 :系统。Web(在System.Web.dll中)

    public string SessionID { get; }
    
        2
  •  1
  •   Kyle Dodge    7 年前
    1. 会话数据存储在服务器上的内存或数据库中。使用存储在cookie中的sessionId来查找此数据。

    2/3. 修改sessionId称为 session hijacking ,并允许您“成为”该用户。这通常被跨站点脚本(XSS)等攻击所利用。

    为防止劫持,请确保:

    • cookie已加密。ASP有很多方法。NET来为您执行此操作,但这样它就不能被篡改
    • cookie设置为HttpOnly。这确保了cookie只能通过http请求发送,而javascript之类的东西(因此XSS攻击)无法访问cookie。
    • 如果您正在使用类似ASP的东西。NET会话状态,更改cookie的默认名称,使其不易识别