Una società esterna ha eseguito alcuni test di penetrazione sull'applicazione ASP.NET MVC 5 su cui sto lavorando.Invalidate Old Session Cookie - Identità ASP.Net
Un problema che hanno sollevato è descritta di seguito
Un cookie legati con la gestione delle sessioni è chiamato AspNet.ApplicationCookie. Se inserito manualmente, l'applicazione autentica l'utente. Anche se l'utente si disconnette dall'applicazione, il cookie è ancora valido. Ciò significa che il vecchio cookie di sessione può essere utilizzato per un'autenticazione valida entro un periodo di tempo illimitato. Nel momento in cui viene inserito il vecchio valore, l'applicazione lo accetta e lo sostituisce con un cookie appena generato. Pertanto, se l'utente malintenzionato accede a uno dei cookie esistenti, verrà creata la sessione valida, con lo stesso accesso come in passato.
Stiamo utilizzando ASP.NEt Identity 2.2
Ecco la nostra azione di logout sul controller conto
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
return RedirectToAction("Login", "Account");
}
in startup.auth.cs
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromHours(24.0),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
validateInterval: TimeSpan.FromMinutes(1.0),
regenerateIdentityCallback: (manager, user) =>
user.GenerateUserIdentityAsync(manager),
getUserIdCallback: (id) => (Int32.Parse(id.GetUserId())))
}
});
avrei pensavo che il framework si sarebbe preoccupato di invalidare un vecchio cookie di sessione ma di navigare attraverso il codice sorgente di Owin.Security che non appare.
Come si annulla il cookie di sessione al logout?
modifica su Jamie Dunstan 's Consiglio ho aggiunto AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
ma poi non ha fatto alcuna differenza. Posso ancora uscire dall'applicazione, clonare una richiesta precedentemente autenticata in Fiddler e farla accettare dall'applicazione.
Edit: Il mio metodo di disconnessione aggiornato
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> LogOff()
{
var user = await UserManager.FindByNameAsync(User.Identity.Name);
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
await UserManager.UpdateSecurityStampAsync(user.Id);
return RedirectToAction("Login", "Account");
}
Hai provato a sostituire 'AuthenticationManager.Signout();' con 'AuthenticationManager.Signout (DefaultAuthenticationTypes.ApplicationCookie);'? Il signout senza parametri sembra essere un po 'incoerente. –
Cheers. Fatto, ma posso ancora uscire dall'applicazione, e quindi clonare una richiesta precedentemente autenticata in Fiddler e averla accettata – MrBliz
Ho anche rimosso l'Expiretimespan all'avvio.Auth. Nessuna differenza. – MrBliz