为啥不重用“ASP.NET_SessionId”?
Posted
技术标签:
【中文标题】为啥不重用“ASP.NET_SessionId”?【英文标题】:Why not to reuse "ASP.NET_SessionId"?为什么不重用“ASP.NET_SessionId”? 【发布时间】:2016-10-05 05:00:16 【问题描述】:我是 asp.net 的新手,我不明白为什么不重用“ASP.NET_SessionId”?
据我了解,每次用户向服务器请求页面时,IIS 都会为他创建一个“ASP.NET_SessionId”并将其放入用户浏览器的 cookie 中。
我在这里读到了它: https://support.microsoft.com/en-us/kb/899918 并且无法弄清楚为什么我应该在用户注销后删除此 cookie。
上面写着:
有时,您可能不想重复使用会话 ID。如果你这样做并且如果 您了解不重用会话 ID 的后果,请使用 以下代码示例放弃会话并清除 会话 ID cookie:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
您能解释一下删除此 cookie 的优点和重复使用它的缺点吗?
【问题讨论】:
【参考方案1】:如果你不删除它并且你使用的是http,那么这是一个安全风险
例如
-
转到 www.dodgyhacker.com,他们有一个不可见的 iframe,其中包含 www.yoursite.com 的登录页面。他们可以看到 cookie 并将其发送到远程服务器
现在导航到 www.yoursite.com,cookie 没有更改,您登录
狡猾的黑客现在可以使用您的会话 cookie 并获得对系统的完全访问权限
实际上还有其他方法可以防止这种情况发生,而且我不是黑客,所以这可能有点错误,但这些是必不可少的步骤
【讨论】:
我不认为黑客通过我的会话 cookie 可以通过系统完全访问我的信息... 这叫做会话劫持。这涵盖了它owasp.org/index.php/Session_hijacking_attack 还有codeproject.com/Articles/859579/… 我阅读了两个链接中的文章,但我不明白。假设我使用会话 id = 'X' 登录,并且您访问同一个网站并获得我的会话 ID,它对您有什么帮助?您需要其他详细信息,例如我的用户名、我的网站 ID 等等。我在登录之前获得了 ASP.NET_SessionID。 请记住,我们这里一般说的是,您的网站可能没有这个问题,但是... 一旦您通过登录页面,服务器如何知道您是您?它很有可能会这样做,因为它会检查会话/身份验证/其他 cookie。如果其他人拥有这些,那么就系统而言,他们就是你。以上是关于为啥不重用“ASP.NET_SessionId”?的主要内容,如果未能解决你的问题,请参考以下文章
Chrome 和 IE 不发送 ASP.NET_SessionID - 即会话变量丢失?
WEBapi如何 去除 ASP.NET_SessionId 这个返回的Cookies啊?
当 requireSSL 为 true 时,asp.net_sessionid 是不是应该出现在 http 请求中
如果定义了 Session_Start,ASP.NET 如何知道创建 ASP.NET_SessionId cookie?