Внешняя компания провела некоторые тесты на проникновение в приложение ASP.NET MVC 5, над которым я работаю.Invalidate Old Session Cookie - Identity ASP.Net
Вопрос, который они подняли описано ниже
печенья, связанный с управлением сеансом называется AspNet.ApplicationCookie. При вводе вручную приложение аутентифицирует пользователя. Несмотря на то, что пользователь выходит из приложения, cookie все еще действует. Это означает, что старый сеансовый файл cookie может использоваться для проверки подлинности в течение неограниченного периода времени. В тот момент, когда старое значение вставлено, приложение принимает его и заменяет собой вновь созданный файл cookie. Поэтому, если злоумышленник получает доступ к одному из существующих файлов cookie, будет создан действительный сеанс с тем же доступом, что и в прошлом.
Мы используем ASP.net Идентичность 2,2
Вот наш выход из системы действия на контроллере счета
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
return RedirectToAction("Login", "Account");
}
в 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())))
}
});
Я бы подумал, что структура позаботилась бы о недействительности старого cookie сеанса, но просматривая исходный код Owin.Security, он выглядит не так.
Как я могу аннулировать файл cookie сеанса при выходе из системы?
Редактировать на форуме Jamie Dunstan Я добавил AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
, но потом ничего не изменилось. Я все еще могу выйти из приложения, клонировать ранее проверенный запрос в Fiddler и принять его приложением.
Edit: Мой обновленный метод Logoff
[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");
}
Вы пытались заменить 'AuthenticationManager.Signout();' на 'AuthenticationManager.Signout (DefaultAuthenticationTypes.ApplicationCookie);'? Беззнаковое выступление выглядит немного непоследовательным. –
Cheers. Выполнено, но я все еще могу выйти из приложения, а затем клонировать ранее проверенный запрос в скрипт и принять его – MrBliz
Я также удалил Expiretimespan из startup.Auth. Нет разницы. – MrBliz