مقدمه
در دنیای توسعه وب، امنیت یکی از مهمترین نکاتی است که باید در هر پروژهای به آن توجه شود. فریمورک ASP.NET Core مجموعهای از ابزارها و قابلیتها را برای پیادهسازی امنیت بهینه در اختیار توسعهدهندگان قرار میدهد. در این مقاله با مهمترین رویکردها و تکنیکهای افزایش امنیت در برنامههای ASP.NET Core آشنا میشویم.
استفاده از احراز هویت (Authentication)
احراز هویت هسته بسیاری از اپلیکیشنهای امن است. در ASP.NET Core چندین روش برای پیادهسازی آن وجود دارد:
1. استفاده از Identity
ASP.NET Identity یک سیستم جامع برای مدیریت کاربران، ورود و خروج، بازیابی رمز عبور و تایید هویت است.
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
2. احراز هویت با JWT
در برنامههای SPA یا API محور، استفاده از JWT توصیه میشود:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "yourIssuer",
ValidAudience = "yourAudience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
};
});
استفاده از مجوزدهی (Authorization)
پس از احراز هویت، نوبت به اعمال محدودیت بر اساس نقش یا سیاست خاص میرسد.
سادهترین روش: محدودسازی بر اساس نقش
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly()
{
return View();
}
استفاده از Policy-Based Authorization
services.AddAuthorization(options =>
{
options.AddPolicy("OnlyForManagers", policy =>
policy.RequireClaim("Department", "Management"));
});
محافظت در برابر حملات XSS و CSRF
Cross-Site Scripting (XSS)
برای جلوگیری از XSS باید از HTML Encoding استفاده کرد. Razor به صورت پیشفرض اینکار را انجام میدهد.
Cross-Site Request Forgery (CSRF)
در فرمها یک توکن ضد-CSRF قرار داده میشود:
<form asp-action="SubmitData" method="post">
@Html.AntiForgeryToken()
<input type="text" name="data" />
<button type="submit">ارسال</button>
</form>
در Controller:
[ValidateAntiForgeryToken]
public IActionResult SubmitData(string data)
{
// ذخیره یا پردازش داده
}
کاهش سطح خطاها و مدیریت Exception ها
در محیط Production، نباید خطاهای دقیق سرور به کاربر نمایش داده شود:
if (!env.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
همچنین استفاده از لاگگیری جزئیات خطاها با Serilog یا ILogger کمک میکند تا مسیر حملات شناسایی شوند.
سختسازی هدرهای HTTP
- استفاده از
HSTSبرای اجبار به استفاده از HTTPS - استفاده از
Content-Security-Policyبرای محدود کردن منابع خارجی
app.UseHsts();
app.UseHttpsRedirection();
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
context.Response.Headers.Add("X-Frame-Options", "DENY");
await next();
});
رمزنگاری دادهها
اطلاعات حساس نظیر رمزها یا Tokenها باید حتماً رمزنگاری شوند.
- برای رمز عبورها از الگوریتم هش مانند
PBKDF2استفاده کنید (Identity اینکار را بهصورت پیشفرض انجام میدهد). - برای ذخیره دادههای حساس در DB نیز میتوان از الگوریتم AES استفاده کرد.
استفاده از HTTPS
حتماً از HTTPS برای امنسازی ارتباط بین کلاینت و سرور بهره بگیرید. در فایل launchSettings.json میتوانید توسعه را نیز با آن پیکربندی نمایید.
نتیجهگیری
امنیت برنامههای وب یکی از مهمترین چالشها و اولویتها در توسعه حرفهای است. ASP.NET Core ابزارهای فراوانی را برای پیادهسازی امنیت در دسترس قرار میدهد. از احراز هویت و مجوزدهی گرفته تا محافظت در برابر حملات رایج مانند XSS و CSRF، همچنین پیکربندی هدرهای HTTP و استفاده از HTTPS، همگی کمک میکنند تا سطح ایمنی اپلیکیشن شما به طرز قابل ملاحظهای افزایش یابد.
برای درک عمیقتر از امنیت و ASP.NET Core، پیشنهاد میکنیم به دوره تخصصی امنیت در ASP.NET Core در وبسایت Devtube.ir مراجعه کنید.