Một công ty bên ngoài đã thực hiện một số kiểm tra thâm nhập trên ứng dụng ASP.NET MVC 5 mà tôi đang thực hiện.Cookie phiên cũ không hợp lệ - Nhận dạng ASP.Net
Một vấn đề mà họ đưa ra được mô tả dưới đây
Cookie gắn với quản lý phiên được gọi AspNet.ApplicationCookie. Khi được nhập theo cách thủ công, ứng dụng sẽ xác thực người dùng. Mặc dù người dùng đăng xuất khỏi Ứng dụng, cookie vẫn hợp lệ. Điều này có nghĩa, cookie phiên cũ có thể được sử dụng để xác thực hợp lệ trong khung thời gian không giới hạn. Trong thời điểm giá trị cũ được chèn vào, ứng dụng chấp nhận nó và thay thế nó bằng một cookie mới được tạo ra. Do đó, nếu kẻ tấn công có quyền truy cập vào một trong các cookie hiện có, phiên hợp lệ sẽ được tạo, với cùng quyền truy cập như trong quá khứ.
Chúng tôi đang sử dụng ASP.NEt nhận dạng 2.2
Dưới đây là hành động logout của chúng tôi trên bộ điều khiển tài khoản
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
return RedirectToAction("Login", "Account");
}
trong 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())))
}
});
tôi sẽ phải nghĩ rằng khung công tác sẽ quan tâm đến việc vô hiệu hóa một cookie phiên cũ nhưng duyệt qua mã nguồn Owin.Security mà nó xuất hiện không.
Làm cách nào để vô hiệu hóa cookie phiên khi đăng xuất?
chỉnh sửa trên Jamie Dunstan Lời khuyên của tôi đã thêm AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
nhưng sau đó không có sự khác biệt. Tôi vẫn có thể đăng xuất khỏi ứng dụng, sao chép một yêu cầu đã được xác thực trước đó trong Fiddler và yêu cầu ứng dụng chấp nhận nó.
Chỉnh sửa: My cập nhật phương pháp 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");
}
Bạn đã thử thay thế 'AuthenticationManager.Signout();' bằng 'AuthenticationManager.Signout (DefaultAuthenticationTypes.ApplicationCookie);'? Thông báo đăng xuất không có vẻ có chút không nhất quán. –
Chúc mừng. Xong, nhưng tôi vẫn có thể đăng xuất khỏi ứng dụng, và sau đó sao chép một yêu cầu đã được xác thực trước đó trong fiddler và chấp nhận nó – MrBliz
Tôi cũng đã xóa Expiretimespan khỏi startup.Auth. Không khác nhau. – MrBliz