我正在编写一些基于SessionID的日志代码...
但是,当我注销(调用Session.Abandon)并再次登录时,SessionID仍然是相同的.基本上我的PC上的每个浏览器都有自己的会话ID"附加",并且由于某种原因它不会改变:/
有什么想法发生了什么?
我的Session配置如下所示:
<sessionState
mode="InProc"
timeout="1" />
Run Code Online (Sandbox Code Playgroud)
谢谢,Paweł
我一直在阅读很多关于会话固定攻击的内容,我遇到的最流行的解决方案是在用户登录时更改SessionID,并使用GUID创建额外的cookie以验证用户"属于"SessionID.
我的问题是:仅仅删除SessionID cookie(ASP.NET_SessionID)以确保生成新的SessionID是不够的?在MVC 5中,当用户登录其他加密的用户声明时,会创建Cookie(AspNet.ApplicationCookie),Identity会在每次请求时使用该Cookie来验证用户身份.额外的"GUID cookie"似乎是不必要的.
我最初是一个.NET桌面应用程序开发人员,编写我的第一个MVC应用程序,学习曲线有点陡峭......虽然令人耳目一新.
谢谢你的帮助.
我有一个使用表单身份验证和成员资格的网站.用户必须启用cookie才能使用该站点.我被要求更改代码,以便在用户登录时更改会话ID.显然,这将防止会话修复攻击(http://en.wikipedia.org/wiki/Session_fixation).有没有人知道如何在不丢失整个会话的情况下更改会话ID?PHP有一个特定的方法来做到这一点,但我找不到.NET等价物.
因此,在登录/更改访问级别/等之后,我遇到了一个实现会话ID滚动的有趣问题.
在登录时我正在尝试使用SessionIDManager生成新的会话ID,但是这只会更改cookie标头,它不会在HttpContext中交换会话,因此我会向会话添加其他详细信息(各种详细信息)将用户绑定到会话ID),他们立即迷路(更不用说旧会话被遗弃).
为了防止会话劫持(通过存储主要的非SSL通信)和会话固定,我们应该在登录时生成新的会话ID,但Microsoft似乎不允许您这样做(grr,这么多的只读变量和没有构造函数的密封类).我可以只迁移后端SQL中的所有数据,但这似乎有点"肮脏的黑客".
关于如何正确地做到这一点的任何想法?
编辑:
我发现的实现:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Run Code Online (Sandbox Code Playgroud)
会话仍然是旧会话,因此在下一页上,所有更改都将丢失.
SessionIDManager在SaveSessionID之后不返回会话对象,因此我无法向刚创建的会话添加详细信息.在下一页加载我可以,但旧会话现在无法访问(并放弃,但即使它没有被放弃...).
HttpContext.Session是只读的,即使它不是,HttpSessionState也没有构造函数.
编辑2:
显然会话固定和劫持在此之前已经被讨论过了,答案是"微软似乎并不关心",实施的两阶段修复效果不佳.
我有一个asp.net网络表单。用户进行身份验证时,它将创建一个名为.aspxauth的安全cookie。
uppon注销,我称之为这两种方法
FormsAuthentication.SignOut();
Session.Abandon()
Run Code Online (Sandbox Code Playgroud)
问题是我们进行了渗透测试,如果我窃取了cookie,注销并手动重新插入cookie,我将再次被登录。因此,.aspauth不会使服务器端无效。
我已经用谷歌搜索了,但是找不到该安全漏洞的答案。
Based on what i have understood we have
sessionId is stored in the cookie .AspNetCore.SessionDeleting the cookies and Clearing the session does nothing.
context.HttpContext.Session.Clear();
foreach (var cookie in context.HttpContext.Request.Cookies.Keys)
{
context.HttpContext.Response.Cookies.Delete(cookie);
}
Run Code Online (Sandbox Code Playgroud)所以问题是我们可以以sessionId某种方式改变,或者有没有办法保护我们免受会话修复?
目前我们正面临一个关于会话固定的问题。我们确实有一个安全的站点,即 Https,并且没有对其进行身份验证。这意味着它可以匿名访问。因此,我们正面临来自黑客的会话固定问题。有人可以帮助和指导吗????
我遇到了asp.net的安全问题.在注销时,我想确保会话被销毁,以便有人不能使用相同的sessionid和auth cookie并在那里编辑cookie,服务器仍然会响应会话.
FormsAuthentication.SignOut();
Session.Abandon();
Session.RemoveAll();
Session.Clear();
Run Code Online (Sandbox Code Playgroud)
我也试图给客户写新的cookie
// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
Run Code Online (Sandbox Code Playgroud)
我尝试过在不同的订单中使用以下内容,但仍然没有骰子.如果我使用原始的sessionid和Auth cookie,我仍然可以登录.我希望服务器在我注销时完全忘记该sessionid.这甚至可能吗?
asp.net ×5
session ×5
c# ×3
security ×3
cookies ×2
.net ×1
asp.net-4.0 ×1
asp.net-core ×1
asp.net-mvc ×1
c#-4.0 ×1
sessionid ×1