Ein externes Unternehmen hat einige Penetrationstests für die ASP.NET MVC 5-Anwendung ausgeführt, an der ich gerade arbeite.Old Session-Cookie ungültig machen - ASP.Net Identity
Ein Thema, das sie angehoben unter
Ein Cookie mit Session-Management verknüpft beschrieben wird AspNet.ApplicationCookie genannt. Wenn sie manuell eingegeben wird, authentifiziert die Anwendung den Benutzer. Obwohl sich der Benutzer von der Anwendung abmeldet, ist der Cookie weiterhin gültig. Das heißt, das alte Session-Cookie kann für eine gültige Authentifizierung innerhalb unbegrenzter Zeit verwendet werden. In dem Moment, in dem der alte Wert eingefügt wird, akzeptiert die Anwendung sie und ersetzt sie durch ein neu erzeugtes Cookie. Wenn der Angreifer Zugriff auf eines der vorhandenen Cookies erhält, wird daher die gültige Sitzung mit demselben Zugriff wie in der Vergangenheit erstellt.
Wir verwenden ASP.NEt Identität 2.2
Hier ist unsere Abmeldung auf dem Konto Controller
[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())))
}
});
Ich hätte Ich dachte, dass das Framework dafür gesorgt hätte, ein altes Session-Cookie ungültig zu machen, aber das Browsen durch den Quellcode von Owin.Security scheint nicht der Fall zu sein.
Wie kann ich den Sitzungscookie beim Abmelden ungültig machen?
bearbeiten auf Jamie Dunstan 's Beratung habe ich AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
hinzugefügt, aber dann hat es keinen Unterschied gemacht. Ich kann mich immer noch von der Anwendung abmelden, eine zuvor authentifizierte Anfrage in Fiddler klonen und sie von der Anwendung akzeptieren lassen.
Edit: Meine aktualisiert Abmelde Methode
[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");
}
Haben Sie versucht, 'AuthenticationManager.Signout();' durch 'AuthenticationManager.Signout (DefaultAuthenticationTypes.ApplicationCookie);'? Das parameterlose Abmelden scheint etwas inkonsistent zu sein. –
Prost. Fertig, aber ich kann mich immer noch von der Anwendung abmelden, und dann eine zuvor authentifizierte Anfrage in Fiddler klonen und es akzeptiert haben – MrBliz
Ich habe auch die Expiretimespan von startup.Auth entfernt. Kein Unterschied. – MrBliz