Abh*_*hek 2 authentication cookies session asp.net-mvc-4 burp
我在asp.net mvc中创建一个Web应用程序,它使用表单身份验证来验证用户.我正在使用HTTP代理工具"burp"来捕获经过身份验证的用户身份验证的cookie.之后我从应用程序注销.现在我使用捕获的经过身份验证的cookie向我的服务器发送请求,服务器将请求视为经过身份验证的请求(即使从我的浏览器注销该用户).在我的退出代码中,是否有人能告诉我出错的地方?
以下是我的应用程序注销代码
public virtual ActionResult LogOff()
{
FormsAuthentication.SignOut();
Session.Abandon();
// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);
// clear session cookie
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
HttpCookie cookie3 = new HttpCookie("__RequestVerificationToken", "");
cookie3.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie3);
HttpCookie cookie4 = new HttpCookie(".ASPXAUTH", "");
cookie4.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie4);
return RedirectToAction(MVC.Account.Login());
}
Run Code Online (Sandbox Code Playgroud)
下面是burp工具的屏幕截图,用于发送经过身份验证的请求,该请求提供成功响应

在经过大量搜索之后,我得出了结果,没有一种正确的方法来使经过身份验证的cookie无效.经过身份验证的cookie".ASPXAUTH"(身份验证cookie的默认名称)基本上只包含userName,生成时和过期详细信息.它并没有真正告诉用户是否真的经过身份验证.
如果用户注销,则此cookie将从浏览器中删除,但如果此cookie保留在某处,则仍将用作经过身份验证的请求.
我找到的唯一解决方案是使用此cookie添加一些额外的唯一数据,并将该数据存储在服务器(可能是数据库)的某个位置,并比较来自数据库的每个身份验证请求中的唯一数据.当用户从数据库中注销清除该唯一数据时,这将确保如果在用户注销后通过某种方式捕获的经过身份验证的请求到达服务器,则不会在服务器上进行身份验证.