修改会话ID时会发生什么?

时间:2018-01-29 06:07:52

标签: c# asp.net .net session cookies

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

了解会话和Cookie的工作原理herehere

我对它的看法就像是,

  1. 用户登录并建立会话后,会给他或她一个会话ID以进一步跟踪他们。

  2. 此外,此B可以存储在服务器上,如SQL Server或InProc,这意味着它存储在发布服务器或缓存Redis缓存中。

  3. 我的问题是,

    我可以理解,sessionId存储在一个内存中,并且随着每个请求(因为HttpSessions是无状态的)被发送为HttpHeaders。

    1. 当我们谈论在内存中存储会话时,我们在谈论哪些内存?
    2. 如果我们将它们存储在cookie中,那么如果我去修改cookie会是什么?
    3. 如果我可以修改它们,那么如果我更改sessionId并提供新的sessionId会怎么样?

2 个答案:

答案 0 :(得分:1)

<强> 1。当我们谈论在内存中存储会话时,我们在谈论哪些内存?

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

<强> 2。如果我们将它们存储在cookie中,那么如果我去修改cookie呢?

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

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

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

第3。如果我可以修改它们,如果我更改了sessionId并在新的sessionId中提供了什么?

Ans:如果您正在使用System.Web.SessionState的SessionId。它不能被改变,因为它是readonly。但您可以在客户端(Cookie或URL)自由更改任何内容

命名空间:System.Web.SessionState

程序集:System.Web(在System.Web.dll中)

public string SessionID { get; }

答案 1 :(得分:0)

  1. 会话数据存储在服务器上,可以存储在内存中,也可以存储在数据库中。使用存储在cookie中的sessionId查找此数据。
  2. 2/3。修改sessionId称为session hijacking,允许您&#34;成为&#34;那个用户。这通常被利用跨站点脚本(XSS)等攻击。

    为防止劫持,请确保:

    • Cookie已加密。 ASP.NET可以通过多种方式为您执行此操作,但这样就无法篡改
    • Cookie设置为HttpOnly。这样可以确保cookie只能通过http请求发送,而javascript之类的东西 - 因此XSS攻击 - 无法访问cookie。
    • 如果您使用的是ASP.NET会话状态,请更改cookie的默认名称,使其不易识别