در دنیای امروز، امنیت برنامههای وب یک ضرورت غیرقابل انکار است. با انتشار .NET 9، مایکروسافت امکانات جدیدی برای افزایش امنیت ارائه داده است. در این مقاله، با تمرکز بر تنظیمات احراز هویت و کوکیها، بهترین راهکارهای عملی را بررسی میکنیم.
۱. تنظیمات پیشرفته کوکیها
services.ConfigureApplicationCookie(options =>
{
// تنظیمات امنیتی پیشرفته
options.Cookie.HttpOnly = true;
options.Cookie.SameSite = SameSiteMode.Strict; // جلوگیری از حملات CSRF
options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // فقط HTTPS
options.Cookie.IsEssential = true; // رعایت GDPR
options.Cookie.Name = "MyApp.Auth"; // نام سفارشی
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.SlidingExpiration = true;
// مسیرهای مهم
options.LoginPath = "/Identity/Account/Login";
options.LogoutPath = "/Identity/Account/Logout";
options.AccessDeniedPath = "/Identity/Account/AccessDenied";
// افزایش امنیت خروج
options.Events.OnRedirectToLogout = context =>
{
context.Response.Headers["Cache-Control"] = "no-cache, no-store";
return Task.CompletedTask;
};
});
چرا این تنظیمات حیاتی هستند؟
-
HttpOnly=true: جلوگیری از دسترسی جاوااسکریپت به کوکی
-
SameSite=Strict: مقابله با حملات CSRF
-
SecurePolicy=Always: انتقال فقط از طریق HTTPS
-
IsEssential=true: رعایت مقررات GDPR برای کوکیهای ضروری
۲. مدیریت Authorization با سیاستهای سفارشی
services.AddAuthorization(options =>
{
// سیاست "فقط مدیران"
options.AddPolicy("AdminOnly", policy =>
policy.RequireRole("Administrator")
.RequireAuthenticatedUser());
// سیاست "ورود دو مرحلهای فعال"
options.AddPolicy("TwoFactorEnabled", policy =>
policy.RequireClaim("amr", "mfa")));
});
services.AddRazorPages(options =>
{
// اعمال سیاستها
options.Conventions.AuthorizeAreaFolder("admin", "/", "AdminOnly");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/register", "TwoFactorEnabled");
});
کاربرد سیاستها:
-
AdminOnly: دسترسی انحصاری به پنل مدیریت
-
TwoFactorEnabled: اجبار به فعالسازی 2FA برای ثبتنام
۳. محافظت در برابر حملات Brute Force
// فعالسازی Rate Limiting
builder.Services.AddRateLimiter(options =>
{
options.AddPolicy<string>("LoginLimit", context =>
RateLimitPartition.GetFixedWindowLimiter(
partitionKey: context.User.Identity?.Name ?? context.Request.IP,
factory: _ => new FixedWindowRateLimiterOptions
{
Window = TimeSpan.FromMinutes(5),
PermitLimit = 5 // حداکثر ۵ تلاش در ۵ دقیقه
}
));
});
// در middleware:
app.UseRateLimiter();
۴. مدیریت کلیدهای امنیتی (Data Protection)
services.AddDataProtection()
.PersistKeysToAzureBlobStorage("ConnectionString", "container", "key-blob")
.ProtectKeysWithAzureKeyVault(new Uri("https://myvault.vault.azure.net/keys/key-name"));
چرا ضروری است؟
-
ذخیره امن کلیدهای رمزنگاری
-
امکان استفاده در محیطهای خوشهای (Server Farm)
۵. تنظیمات امنیتی سربرگها (Security Headers)
app.Use(async (context, next) =>
{
// تنظیم سربرگهای امنیتی
context.Response.Headers.Append("Content-Security-Policy",
"default-src 'self'; script-src 'self' 'unsafe-inline'");
context.Response.Headers.Append("X-Content-Type-Options", "nosniff");
context.Response.Headers.Append("X-Frame-Options", "DENY");
context.Response.Headers.Append("Referrer-Policy", "no-referrer");
await next();
});
مزایا:
-
جلوگیری از XSS با Content-Security-Policy
-
مقابله با MIME Sniffing با X-Content-Type-Options
-
جلوگیری از Clickjacking با X-Frame-Options
۶. امنیت Anti-Forgery Tokens
services.AddAntiforgery(options =>
{
options.FormFieldName = "XSRF-TOKEN";
options.HeaderName = "X-XSRF-TOKEN";
options.Cookie.Name = "XSRF-TOKEN";
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
});
۷. تنظیمات جلسات (Sessions)
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.IsEssential = true;
options.Cookie.SameSite = SameSiteMode.Strict;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
});
۸. ویژگیهای امنیتی جدید در .NET 9
۱. AOT (Ahead-of-Time) Compilation:
-
کاهش سطح حمله با حذف JIT Compiler
-
فعالسازی در csproj:
<PublishAot>true</PublishAot>
۲. Certificate-Based Authentication:
services.AddAuthentication()
.AddCertificate(options =>
{
options.AllowedCertificateTypes = CertificateTypes.All;
});
جدول خلاصه تنظیمات امنیتی
تنظیمات | مقدار پیشنهادی | توضیح |
---|---|---|
SameSite | Strict | جلوگیری از CSRF |
SecurePolicy | Always | انتقال فقط روی HTTPS |
HttpOnly | true | عدم دسترسی JS |
Rate Limiting | 5 درخواست/5دقیقه | جلوگیری از Bruteforce |
X-Frame-Options | DENY | جلوگیری از Clickjacking |
نتیجهگیری
پیادهسازی این راهکارها در ASP.NET Core 9 میتواند تا ۸۰٪ از آسیبپذیریهای رایج را کاهش دهد. به یاد داشته باشید:
"امنیت یک مقصد نیست، یک سفر مستمر است"
همیشه:
-
تنظیمات را در محیط Staging تست کنید
-
از ابزارهای تحلیل امنیتی مانند Security Code Scan استفاده کنید
-
بهروزرسانیهای امنیتی .NET را پیگیری نمایید