امنیت پیشرفته در ASP.NET Core 9: راهکارهای عملی برای حفاظت از برنامه‌های وب

7/20/2025 MVC Core
143

در دنیای امروز، امنیت برنامه‌های وب یک ضرورت غیرقابل انکار است. با انتشار .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 را پیگیری نمایید