مقدمه
امنیت در توسعه برنامههای وب بسیار اهمیت دارد، زیرا برنامههای تحت وب معمولاً در معرض حملات متعددی مانند 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 را بررسی کنید.