مقدمه
امنیت در توسعه نرمافزارهای وب، بهویژه در سمت سرور، یکی از مهمترین چالشهایی است که توسعهدهندگان هر روز با آن مواجهاند. فریمورک ASP.NET Core امکانات متنوع و پیشرفتهای در زمینه امنیت فراهم کرده است که به کمک آن میتوان برنامهها را در برابر انواع حملات اینترنتی محافظت کرد.
ابزارها و رویکردهای امنیتی در ASP.NET Core
1. احراز هویت (Authentication)
ASP.NET Core از چندین مکانیزم احراز هویت پشتیبانی میکند:
- Cookie Authentication
- JWT Bearer Tokens (برای APIها)
- OAuth و OpenID Connect (مانند Google، Facebook، Azure AD)
مثال پیکربندی توکن JWT:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = ❝https://example.com❝,
ValidAudience = ❝https://example.com❝,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
};
});
2. مجوزدهی (Authorization)
برای تعیین سطح دسترسی کاربران میتوانید از روشهای زیر استفاده کنید:
- Role-based Authorization
- Policy-based Authorization
[Authorize(Roles = ❝Admin❝)]
public IActionResult GetAdminData()
{
return Ok("Admin Content");
}
3. جلوگیری از حملات XSS
XSS یا Cross-Site Scripting یکی از رایجترین حملات مبتنی بر مرورگر است. در Razor Pages و MVC دیدگاهها بهطور پیشفرض ایمن هستند:
@Model.Username // به صورت خودکار HTML Encode میشود
در مواردی خاص که لازم است HTML خام رندر شود:
@Html.Raw(Model.Content)
توجه: فقط در زمانی که مطمئن هستید داده پاکسازی شده استفاده شود.
4. جلوگیری از حملات CSRF
با فعال بودن Anti-Forgery Token در MVC و Razor، از حملات Cross-Site Request Forgery جلوگیری میشود.
<form method="post" asp-controller="Account" asp-action="Login">
@Html.AntiForgeryToken()
<input type="text" name="username" />
<input type="password" name="password" />
<button type="submit">ورود</button>
</form>
5. جلوگیری از SQL Injection
با استفاده از Entity Framework Core و کوئریهای پارامتری، بهراحتی میتوان از SQL Injection جلوگیری کرد:
var user = await _context.Users
.Where(u => u.Username == username)
.FirstOrDefaultAsync();
هرگز دیتای خام را مستقیماً به کوئریهای SQL ندهید.
۶. پیکربندی Headerهای امنیتی
میتوانید HTTP Headerهایی از جمله HSTS، X-Content-Type-Options، X-Frame-Options و Content-Security-Policy را پیکربندی کنید:
app.UseHsts();
app.UseXContentTypeOptions();
app.UseXfo(options => options.Deny());
app.UseCsp(options =>
{
options.DefaultSources(s => s.Self());
});
۷. امنسازی دادههای حساس
- رمزنگاری اطلاعات حساس با استفاده از الگوریتمهایی مانند AES
- استفاده از
IDataProtector
برای رمزنگاری ایمن در ASP.NET Core
var protector = _dataProtectionProvider.CreateProtector("MySecretKey");
var protectedData = protector.Protect("SensitiveData");
var unprotectedData = protector.Unprotect(protectedData);
۸. لاگگیری فعالیتهای مشکوک
با استفاده از سیستم لاگگیری داخلی ASP.NET Core یا ابزارهایی مانند Serilog میتوانید فعالیتهای مشکوک را ثبت و تحلیل کنید.
نتیجهگیری
امنیت هیچگاه کامل نیست اما با رعایت نکات فوق و استفاده از قابلیتهای قدرتمند ASP.NET Core، میتوان نرمافزارهای ایمنی ساخت که در برابر حملات رایج مقاوم باشند. پیشنهاد میشود برای یادگیری عملی، با دورههای حرفهای مانند دوره آموزش امنیت در ASP.NET Core در سایت Devtube.ir همراه شوید.