افزایش امنیت برنامه‌های وب با استفاده از ASP.NET Core

توسط: محسن درم بخت | منتشر شده در 1404/09/19 | بازدید : 8 بار | زمان مطالعه : 12 دقیقه

مقدمه

امنیت در توسعه برنامه‌های وب بسیار اهمیت دارد، زیرا برنامه‌های تحت وب معمولاً در معرض حملات متعددی مانند Cross Site Scripting (XSS)، Cross Site Request Forgery (CSRF)، تزریق SQL و غیره هستند. خوشبختانه، ASP.NET Core ابزارهای داخلی قدرتمندی برای تقویت امنیت ارائه می‌دهد. در این مقاله، روش‌های مهم امنیتی و نحوه استفاده از آن‌ها در ASP.NET Core را بررسی می‌کنیم.

احراز هویت (Authentication) در ASP.NET Core

احراز هویت به فرآیند شناسایی کاربر اشاره دارد. ASP.NET Core از چندین روش احراز هویت پشتیبانی می‌کند:

  • Cookie Authentication
  • JWT Bearer Token
  • OAuth و OpenID Connect
  • Social Login (Google, Facebook,...)

برای پیاده‌سازی احراز هویت مبتنی بر JWT، ابتدا باید پکیج ❝Microsoft.AspNetCore.Authentication.JwtBearer❝ را اضافه کنید و سپس تنظیمات زیر را در فایل Program.cs اعمال نمایید:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = ❝https://yourdomain.com❝,
            ValidAudience = ❝https://yourdomain.com❝,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey"))
        };
    });

مجوزدهی (Authorization)

پس از احراز هویت، تعیین مجوزها ضروری است. ASP.NET Core با قابلیت‌های انعطاف‌پذیر خود، از نقش‌ها (Roles)، سیاست‌ها (Policies) و Claims برای مجوزدهی استفاده می‌کند.

نمونه استفاده از نقش:

[Authorize(Roles = ❝Admin❝)]
public IActionResult AdminPanel()
{
    return View();
}

استفاده از سیاست‌ها:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy(❝OnlyHR❝, policy =>
        policy.RequireClaim(❝Department❝, ❝HR❝));
});

محافظت در برابر حملات رایج

1. حملات CSRF

ASP.NET Core به صورت پیش‌فرض در Razor Pages و MVC از Tokenهای CSRF استفاده می‌کند. برای فرم‌هایی که با Razor ساخته شده‌اند کافیست از تگ <form asp-antiforgery="true"> استفاده شود.

در APIها، باید خودتان این قابلیت را فعال کنید یا از روش‌های ایمن دیگری مانند Header-based Tokens استفاده کنید.

2. حملات XSS

جهت جلوگیری از حملات XSS، بهترین راه استفاده از Razor Engine است که به طور پیش‌فرض HTML را encode می‌کند. در هنگام نمایش داده‌ها از دستورهای استاندارد مانند زیر استفاده کنید:

<p>@Model.UserComment</p>

3. محافظت از داده‌های حساس

ASP.NET Core ابزار Secret Manager را برای مدیریت داده‌های محرمانه در محیط توسعه ارائه می‌دهد. بهتر است کلیدها و داده‌های حساس را در فایل appsettings.json ذخیره نکنید.

استفاده از HTTPS

استفاده از SSL/TLS و فعال‌سازی HTTPS یک الزام امنیتی است. می‌توانید در فایل Program.cs با استفاده از خط زیر اطمینان حاصل کنید که ترافیک فقط از طریق HTTPS انجام شود:

app.UseHttpsRedirection();

هدرهای امنیتی (Security Headers)

هدرهایی مانند X-Content-Type-Options، Content-Security-Policy و X-Frame-Options می‌توانند از بسیاری از حملات جلوگیری کنند. برای افزودن آن‌ها به پاسخ‌ها از Middlewareهای سفارشی استفاده کنید:

app.Use(async (context, next) =>
{
    context.Response.Headers.Add(❝X-Content-Type-Options❝, ❝nosniff❝);
    context.Response.Headers.Add(❝X-Frame-Options❝, ❝DENY❝);
    await next();
});

تصویر نمونه امنیت در وب‌اپلیکیشن

افزایش امنیت در برنامه‌های وب

جمع‌بندی

ایمن‌سازی برنامه‌های تحت وب یک ضرورت غیرقابل انکار است. خوشبختانه، ASP.NET Core ابزارها و پیکربندی‌های متنوعی برای پیاده‌سازی امنیت ارائه می‌دهد. در این مقاله با روش‌های رایج امنیتی شامل احراز هویت، مجوزدهی، محافظت در برابر CSRF و XSS و سایر گزینه‌های مهم آشنا شدید. اگر علاقه‌مند به یادگیری عمیق‌تر هستید، پیشنهاد می‌شود دوره‌های آموزشی مرتبط با ASP.NET Core در devtube.ir را بررسی کنید.

دوره‌های آنلاین برنامه‌نویسی لیست دوره‌ها