مقدمه
با گسترش روزافزون استفاده از وباپلیکیشنها، امنیت به یکی از مهمترین بخشهای توسعه نرمافزار تبدیل شده است. ASP.NET Core فریمورکی قدرتمند از مایکروسافت است که امکانات متعددی برای افزایش امنیت فراهم میکند. در این مقاله، به بررسی روشهای مؤثر تأمین امنیت در برنامههای ASP.NET Core خواهیم پرداخت.
۱. استفاده از HTTPS
اولین گام برای محافظت از دادههای کاربر، استفاده از HTTPS است. در فایل Program.cs یا Startup.cs میتوانید ریدایرکتی برای فعالسازی HTTPS ایجاد کنید:
app.UseHttpsRedirection();
۲. احراز هویت و نقشها با ASP.NET Identity
ASP.NET Identity قابلیتی پیشساخته برای مدیریت کاربران، نقشها، و احراز هویت فراهم میکند.
نصب پکیجها موردنیاز:
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
پیکربندی در StartUp.cs:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders();
فعالسازی middleware:
app.UseAuthentication();
app.UseAuthorization();
۳. جلوگیری از حملات XSS
XSS یا Cross Site Scripting از رایجترین حملات وب است. با استفاده از Razor Pages و اجتناب از درج مستقیم دادههای آماده نشده، تا حد زیادی میتوان از این نوع حمله جلوگیری کرد.
مثال ایمن:
<p>Hello @Html.Encode(userInput)</p>
۴. جلوگیری از حملات CSRF
ASP.NET Core به طور پیشفرض از حملات CSRF جلوگیری میکند. برای استفاده، کافی است از تگ anti-forgery استفاده کنید:
<form asp-controller="Account" asp-action="Login" method="post">
@Html.AntiForgeryToken()
</form>
۵. استفاده از JWT برای Web API
برای APIهایی که نیاز به احراز هویت دارند، استفاده از JSON Web Token (JWT) روش مناسبی است. ابتدا پکیج زیر را نصب کنید:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
در تنظیمات سرویس:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration[❝Jwt:Issuer❝],
ValidAudience = Configuration[❝Jwt:Audience❝],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration[❝Jwt:Key❝]))
};
});
۶. جلوگیری از اسکن endpointها
با مخفیسازی متدهای حساس یا استفاده از Custom Route Templates و محدودسازی بر اساس نقش کاربر، از دسترسی توسط کاربران غیرمجاز جلوگیری کنید.
[Authorize(Roles = ❝Admin❝)]
[HttpPost(❝admin/secure-action❝)]
public IActionResult SecureAction()
{
// عملیات فقط برای ادمین
}
۷. محدود کردن درخواستها (Rate Limiting)
میتوانید از middlewareهایی مانند AspNetCoreRateLimit برای جلوگیری از حملات brute-force استفاده کنید.
نمونه پیکربندی:
{
❝EnableRateLimiting❝: true,
❝GeneralRules❝: [
{
❝Endpoint❝: ❝*❝,
❝Period❝: ❝1m❝,
❝Limit❝: 30
}
]
}
۸. حذف اطلاعات اضافی در خطاها
در محیط Production، جزئیات دقیق خطاها را نمایش ندهید:
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler(❝/Home/Error❝);
app.UseHsts();
}
نتیجهگیری
امنیت برنامههای تحت وب نقش حیاتی در حفاظت از دادههای کاربران و حفظ اعتبار سامانه دارد. ASP.NET Core ابزارها و قابلیتهای بسیاری برای توسعهدهندگان فراهم کرده است تا با پیادهسازی اصولی ساختار، برنامههایی امن و حرفهای تولید کنند.
اگر میخواهید یادگیری خود را در زمینه امنیت و ASP.NET Core گسترش دهید، پیشنهاد میکنیم دورههای ما در دوره امنیت در ASP.NET Core را دنبال کنید.