我正在使用ASP.net MVC 4构建的applicationI上运行一些安全检查。
我目前正在使用网络调试器在测试期间撰写非正式帖子。
我的应用程序强制执行一项策略,其中数据只能由添加数据的用户修改。
我使用的方法类似于检查当前用户ID
if (item.AddedByUser != WebMatrix.WebData.WebSecurity.CurrentUserId)
{
throw new UnauthorizedException();
}
但是,当我尝试复制先前成功的POST(使用较旧的'ASP.NET_SessionId')时,我发现 WebMatrix.WebData.WebSecurity.CurrentUserId 方法返回了用户的用户ID在上一个会话期间处于活动状态,而不是当前活动用户的userId。
这对我来说似乎是一个潜在的安全漏洞。
有谁知道这是怎么发生的?
修改
我正在调用Sessioon.Abandon()方法并清除ASP.NET_SessionId cookie作为我的LogOff方法的一部分,如下所示
public virtual ActionResult LogOff()
{
WebSecurity.Logout();
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Response.Cookies.Add(new HttpCookie(".ASPXAUTH", ""));
Response.Cookies.Add(new HttpCookie("__RequestVerificationToken", ""));
return RedirectToAction("Index", "Home");
}
但是,如果以前的sessionid作为POST的一部分传递,则会话似乎仍然是“可重用的”