
每個 Java 軟件架構師都應該知道的 20 件事
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequireLowercase = true;
options.Password.RequiredUniqueChars = 6;
});
請記住,其中一些規范比其他規范能更好地保護用戶,但如果用戶不遵守這些規范,它們也可能產生相反的效果。
我建議你實施嚴格的憑證恢復流程。這應該包括幾項驗證檢查和步驟,使攻擊者難以濫用憑證并付出高昂代價。
您可以通過在前面的代碼中添加以下幾行來實現這一點:
services.Configure<IdentityOptions>(options => {
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequireLowercase = true;
options.Password.RequiredUniqueChars = 6;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 10;
options.SignIn.RequireConfirmedEmail = true;
options.User.RequireUniqueEmail = true;
});
密碼保護機制被破解后,密碼被泄露的用戶的賬戶將被鎖定。此外,您可以配置此機制,在用戶更改密碼時恢復訪問權限。這樣,您就可以確保用戶有機會在攻擊者竊取密碼時防止損失。
您可以使用名為 PwnedPassword 的 Git 項目實現此功能,該項目將提供已泄露密碼的更新存儲庫,以便實時進行交叉驗證。
所有 Web 應用程序都必須在一定時間不活動后結束用戶會話。此時間長度取決于應用程序的類型。例如,流媒體平臺可能需要長時間不活動,而敏感的銀行網站則應有較短的時間限制。
要調節會話的長度,請將以下行添加到項目配置文件中。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
/// ADD THIS
builder.Services.AddDistributedMemoryCache();
/// ADD THIS
builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
/// ADD THIS
app.UseSession();
app.MapRazorPages();
app.MapDefaultControllerRoute();
app.Run();
您的平臺必須在每次身份驗證成功后提供單獨的會話 ID。此外,您的系統必須在會話結束后立即使舊會話 ID 失效,以防止劫持。
在所有情況下,您都必須使用 SSL 保護 Web URL,但不包含會話 ID。
多因素身份驗證 (MFA) 是您可以使用的最強大的保護機制之一。MFA 需要額外的憑證來驗證用戶的身份。例如,通過郵寄或短信向用戶發送一次性密碼 (OTP)。
定期向用戶宣傳網絡釣魚攻擊和弱密碼的潛在風險至關重要。每月或每季度發送電子郵件提醒用戶保持警惕和謹慎通常就足夠了。
文章來源:.NET Broken Authentication Guide: Examples and Prevention