افزودن هدرهای امنیتی به برنامههای ASP.NET Core با استفاده از NetEscapades.AspNetCore.SecurityHeaders
مقدمه
امنیت در برنامههای وب یکی از مهمترین جنبههای توسعه نرمافزار است، بهویژه در محیطهایی که حملات سایبری مانند تزریق اسکریپت بینسایتی (Cross-Site Scripting یا XSS) و سوءاستفاده از منابع مشترک (Cross-Origin Attacks) به طور مداوم در حال افزایش است. هدرهای امنیتی (Security Headers) یکی از روشهای مؤثر برای افزایش امنیت برنامههای وب هستند که با تنظیم رفتار مرورگرها، سطح حفاظت برنامه را بهبود میدهند. در اکوسیستم Microsoft .NET، بسته NuGet با نام NetEscapades.AspNetCore.SecurityHeaders ابزاری قدرتمند برای مدیریت و اعمال این هدرها در برنامههای ASP.NET Core ارائه میدهد.
هدرهای امنیتی چیستند؟
هدرهای امنیتی، دستورالعملهایی هستند که در پاسخهای HTTP به مرورگر ارسال میشوند و رفتار آن را در مواجهه با محتوای وب کنترل میکنند. این هدرها میتوانند ویژگیهایی مانند جلوگیری از اجرای اسکریپتهای ناامن، محدود کردن دسترسی به منابع خارجی، یا غیرفعال کردن قابلیتهای خاص مرورگر را فعال یا غیرفعال کنند. هدف اصلی آنها کاهش سطح حمله (Attack Surface) و محافظت از برنامه در برابر تهدیدات رایج است. برخی از هدرهای امنیتی مهم عبارتاند از:
- Content-Security-Policy (CSP): سیاست امنیتی محتوا، که مشخص میکند چه منابعی مجاز به بارگذاری در صفحه هستند.
- Permissions-Policy: سیاستی که دسترسی مرورگر به ویژگیهای خاص مانند دوربین یا موقعیتیابی جغرافیایی را کنترل میکند.
- Cross-Origin-Opener-Policy (COOP): سیاستی برای مدیریت تعاملات بین پنجرههای مرورگر از دامنههای مختلف.
- X-XSS-Protection: محافظت در برابر حملات XSS (در نسخههای جدیدتر منسوخ شده است).
معرفی NetEscapades.AspNetCore.SecurityHeaders
بسته NetEscapades.AspNetCore.SecurityHeaders یک ابزار سبک و انعطافپذیر است که به توسعهدهندگان ASP.NET Core امکان میدهد هدرهای امنیتی را بهصورت خودکار به پاسخهای HTTP اضافه کنند. این بسته از الگوی طراحی روان (Fluent Builder Pattern) استفاده میکند که پیکربندی هدرها را ساده و قابلتنظیم میکند. نسخه 1.0.0 این بسته که در سال 2025 منتشر شده، شامل تغییرات و بهبودهای قابلتوجهی نسبت به نسخههای قبلی است، از جمله:
- حذف پشتیبانی از .NET Framework و تمرکز بر .NET Core 3.1 و نسخههای بالاتر.
- منسوخ کردن هدرهای قدیمی مانند X-XSS-Protection و Expect-CT.
- افزودن روشهای کمکی برای APIها و هدرهای Permissions-Policy.
- پشتیبانی از سیاستهای مختلف برای نقاط پایانی (Endpoints) متفاوت.
- بهبود تولید Nonce (شناسه یکبارمصرف) برای سیاستهای امنیتی محتوا.
نصب و راهاندازی
برای استفاده از این بسته، ابتدا باید آن را از طریق NuGet نصب کنید. این کار میتواند از طریق کنسول مدیریت بستهها (Package Manager Console) در Visual Studio یا با افزودن مستقیم به فایل پروژه (.csproj) انجام شود. نمونه کد زیر نحوه افزودن بسته به پروژه را نشان میدهد:
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<PackageReference Include="NetEscapades.AspNetCore.SecurityHeaders" Version="1.0.0" />
</ItemGroup>
</Project>پس از نصب، میتوانید این بسته را بهعنوان یک میانافزار (Middleware) در خط لوله ASP.NET Core پیکربندی کنید. توجه داشته باشید که ترتیب میانافزارها اهمیت دارد؛ برای اعمال هدرها به تمام درخواستها، این میانافزار باید در ابتدای خط لوله قرار گیرد. نمونه کد زیر نحوه افزودن میانافزار با تنظیمات پیشفرض را نشان میدهد:
public void Configure(IApplicationBuilder app)
{
app.UseSecurityHeaders();
// سایر میانافزارها
}
پیکربندی هدرهای امنیتی
یکی از نقاط قوت این بسته، امکان سفارشیسازی هدرها بر اساس نیازهای برنامه است. برای مثال، میتوانید سیاستهای متفاوتی برای APIها و صفحات HTML تنظیم کنید. در ادامه، چند نمونه از پیکربندیهای رایج ارائه شده است:
1. افزودن سیاست امنیتی محتوا (CSP)
سیاست امنیتی محتوا (CSP) به شما امکان میدهد منابع مجاز برای بارگذاری در صفحه را مشخص کنید. این بسته از یک سازنده روان برای تنظیم CSP پشتیبانی میکند. نمونه کد زیر یک CSP ساده را تعریف میکند که فقط اسکریپتهای داخلی را مجاز میکند:
public void ConfigureServices(IServiceCollection services)
{
services.AddSecurityHeaderPolicies()
.AddPolicy("default", policy => policy
.AddContentSecurityPolicy()
.AddDefaultSrc().Self()
.AddScriptSrc().Self());
}
2. تنظیم Permissions-Policy برای APIها
برای APIهای REST، معمولاً نیازی به فعال بودن قابلیتهای مرورگر مانند دوربین یا میکروفون نیست. نسخه 1.0.0 این بسته روشهای کمکی جدیدی برای غیرفعال کردن این ویژگیها ارائه میدهد. نمونه کد زیر یک سیاست سختگیرانه برای APIها را نشان میدهد:
public void ConfigureServices(IServiceCollection services)
{
services.AddSecurityHeaderPolicies()
.AddPolicy("api", policy => policy
.AddPermissionsPolicy()
.AddLockedDownPermissionsPolicy());
}
3. استفاده از Nonce در CSP
برای افزایش امنیت، میتوانید از Nonce (شناسه یکبارمصرف) برای مجاز کردن اسکریپتهای خاص استفاده کنید. این بسته امکان تولید خودکار Nonce را فراهم میکند. نمونه کد زیر نحوه استفاده از Nonce را با TagHelper نشان میدهد:
@addTagHelper *, NetEscapades.AspNetCore.SecurityHeaders.TagHelpers
<script asp-add-nonce>
var body = document.getElementsByTagName('body')[0];
var div = document.createElement('div');
div.innerText = "I was added using the NonceHelper";
body.appendChild(div);
</script>این کد یک اسکریپت را با یک Nonce منحصربهفرد اجرا میکند که در زمان اجرا بهصورت خودکار تولید میشود.
تغییرات کلیدی در نسخه 1.0.0
نسخه 1.0.0 این بسته چندین تغییر مهم را معرفی کرده است:
- حذف پشتیبانی از .NET Framework: با توجه به منسوخ شدن پشتیبانی ASP.NET Core از .NET Framework، این بسته نیز پشتیبانی از netstandard2.0 و نسخههای قدیمیتر را حذف کرده و بر .NET Core 3.1 و بالاتر تمرکز دارد.
- منسوخ شدن هدرهای قدیمی: هدرهایی مانند X-XSS-Protection و Expect-CT که دیگر توصیه نمیشوند، در این نسخه منسوخ شدهاند.
- پشتیبانی از سیاستهای چندگانه: توسعهدهندگان اکنون میتوانند سیاستهای متفاوتی برای نقاط پایانی مختلف تعریف کنند، که برای برنامههایی با API و UI ترکیبی بسیار مفید است.
- بهبودهای Permissions-Policy: روشهای کمکی جدیدی برای غیرفعال کردن ویژگیهای غیرضروری مرورگر در APIها اضافه شده است، که با توصیههای OWASP همراستا هستند.
بهترین شیوهها
برای استفاده بهینه از این بسته، رعایت چند نکته ضروری است:
- آزمایش کامل: قبل از استقرار در محیط تولید، تمام سیاستهای هدر را در محیط توسعه آزمایش کنید، زیرا تنظیمات نادرست ممکن است عملکرد برنامه را مختل کند.
- استفاده از سیاستهای سختگیرانه برای APIها: برای APIها، تمام ویژگیهای غیرضروری مرورگر را غیرفعال کنید تا سطح حمله کاهش یابد.
- بهروزرسانی منظم: با توجه به تکامل مداوم هدرهای امنیتی، بسته را بهروز نگه دارید تا از ویژگیهای جدید و رفع اشکالات بهرهمند شوید.
- بررسی مستندات OWASP: برای اطمینان از همراستایی با بهترین استانداردها، توصیههای OWASP را مطالعه کنید.
استفاده از این بسته در کنار ابزارهایی مانند SecurityHeaders.com میتواند به توسعهدهندگان کمک کند تا امتیاز امنیتی برنامه خود را ارزیابی کنند. همچنین، ترکیب این بسته با تکنیکهایی مانند Subresource Integrity (SRI) میتواند لایههای امنیتی بیشتری به برنامه اضافه کند. برای مثال، SRI به شما امکان میدهد با افزودن چکسام به اسکریپتهای خارجی، از اجرای اسکریپتهای تغییر یافته جلوگیری کنید.