Sto usando l'identità di asp.net 2.0 per l'autenticazione (middleware Owin) nella mia applicazione. Sessione di sequestro: Quando eseguo il login Identity crea AspNet.ApplicationCookie.then, ho copiato il valore AspNet.ApplicationCookie.Quando ho disconnesso dall'applicazione.Dopo il logout, sto creando manualmente i cookie (AspNet.ApplicationCookie) e faccio un aggiornamento Reindirizza me home page.Privilege Escalation e Session Hijacking in Identity MVC5
Privilege Escalation: Allo stesso tempo, mi sono collegato come AI utente copiato (AspNet.ApplicationCookie) il suo biscotto e mi sono collegato out.After mi sono collegato come utente di BI sono l'editing l'utente B cookie e l'utente incollato A cookie e salvato. Dopo aver aggiornato il browser, posso ottenere l'accesso e l'autenticazione UserA.
Sto cancellando tutta la sessione ed elimini tutti i cookie quando ho effettuato il logout.Anche l'identità Asp.Net (Owin) genera nuovo AspNet.ApplicationCookie ogni volta. Ma accetta ancora i vecchi cookie e mi concede un accesso .Non so perché? Qualcuno può darmi come invalidare il vecchio AspNet.ApplicationCookie dopo la disconnessione. Questo è il mio codice in Startup.Auth.cs
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
// Questo è il codice di logout
public ActionResult LogOff ()
{
//Delete all cookies while user log out
string[] myCookies = Request.Cookies.AllKeys;
foreach (var cookies in myCookies)
{
Response.Cookies[ cookies ].Expires = DateTime.Now.AddDays(-1);
}
Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
// AuthenticationManager.SignOut();
Session.Clear();
Session.RemoveAll();
Session.Abandon();
return RedirectToAction("LoginPage", "Account");
}
// Questo è il mio codice di controllo di accesso
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}