使用.Net Framework 4.7的混合webforms / mvc asp.net应用程序已在Veracode动态扫描中标记为“会话修复”漏洞 . 这意味着Veracode获取登录页面,更改SessionId cookie(ASP.NET_SessionId),然后使用有效的用户ID和密码发布以进行登录 . ASP.Net登录用户,但采用这个改变的SessionId cookie并继续使用它;使用注入的SessionId值的行为是缺陷 .
换句话说,当Veracode获取页面时,SessionId cookie可能是“abc123” . Veracode将cookie更改为“def456”并发回 . ASP.Net登录用户并使用“def456”作为SessionId .
Per Veracode我必须使成功登录前创建的ASP.Net_SessionID cookie无效 . 这很容易做到,当用户成功登录时,我可以简单地重置ASP.NET_SessionId cookie . 问题是,这会导致用户被重定向回到登录页面 . 那么会发生什么:
-
用户提交登录页面 .
-
服务器端,如果登录成功,我将ASP.NET_SessionId重置为一些新值(通过调用SessionIDManager.SaveSessionID(),而后者只是重置ASP.Net_SessionID cookie) .
-
用户被重定向到应用程序主页,然后立即重定向回登录页面
该应用程序使用表单身份验证和webforms登录页面 . 登录页面使用asp.net登录控件 . 在这个控件的“OnAuthenticate”事件中,我有这样的代码:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
bool b = Membership.Validateuser(Login1.UserName, Login1.Password);
if(b)
{
e.Authenticated = true;
SessionIDManager mgr = new SessionIDManager();
string newId = mgr.CreateSessionID(Context);
mgr.SaveSessionID(Context, newId, out bool redirected, out bool cookieAdded);
}
}
这运行没有错误 . ASP.net将用户重定向到应用程序主页 . 但随后asp.net立即将用户从应用程序主页重定向回登录页面 .
有没有办法改变那个SessionId cookie
-
Veracode注入的SessionId cookie值被放弃了 .
-
用户保持身份验证状态,不会简单地重定向回登录页面 .
我试图在各种页面事件(PreInit,Load等)中运行改变SessionId的代码,并且所有这些代码都具有相同的结果 - 用户被重定向回登录页面 .
请不要将此问题标记为已经回答 . 这个问题在SO上有几个答案,所有这些都建议像我上面那样重新设置SessionId cookie,所有这些都有评论指出这实际上不起作用 .
1 回答
经过相当反复的回应,Veracode顾问的最终答复如下,基本上是说“不要担心” . 这是Veracode的回复: