CORS در ASP.NET Core – انجمن DEV
اشتراکگذاری منابع متقاطع (CORS) یک مکانیسم مبتنی بر هدر HTTP است که سرور را قادر میسازد هر مبدا (دامنه، طرح یا پورت) را غیر از منبع خود مشخص کند که مرورگر باید از طریق آن منابع بارگذاری شود. این اجازه می دهد تا بسیاری از درخواست های منبع، مانند Ajax یا Fetch، که از یک دامنه متفاوت (مبدأ متقابل) سرچشمه می گیرند، در یک دامنه وب (منبع) درخواست شوند. CORS به مکانیزمی متکی است که در آن مرورگرها یک درخواست “پیش از پرواز” به سرور میزبان منبع متقاطع ارسال می کنند تا بررسی کنند که آیا سرور به درخواست واقعی اجازه می دهد یا خیر. در طول این پیش از پرواز، مرورگر سرصفحه هایی را ارسال می کند که نشان دهنده روش HTTP و سرصفحه هایی است که در درخواست واقعی استفاده می شود.
🛠️ راه اندازی CORS
برای راه اندازی CORS در ASP.NET Core، مراحل زیر باید دنبال شود:
- بسته میان افزاری را نصب کنید: میان افزار CORS را از طریق مدیر بسته NuGet با دستور نصب کنید
Install-Package Microsoft.AspNetCore.Cors
. - سرویس CORS را اضافه کنید: پس از نصب بسته، سرویس های اشتراک گذاری منابع متقاطع را به موارد مشخص شده اضافه کنید
IServiceCollection
. - سیاست های CORS را پیکربندی کنید: در نهایت، خط مشی خود را در سرویس CORS بسازید.
builder.Services.AddCors(options =>
{
options.AddPolicy("MyCorsPolicy",
builder =>
{
builder => builder.WithOrigins("https://example.com")
.AllowAnyHeader()
.WithMethods("GET", "POST", "PUT", "DELETE");
});
});
در این مثال، ما یک سیاست به نام “MyCorsPolicy” ایجاد کردیم که فقط به آن اجازه دسترسی را می دهد https://example.com
دامنه، مطمئن می شود که هر هدر را مجاز می کند و روش های مجاز را محدود می کند GET, POST, PUT, DELETE
.
🔒 CORS را فعال کنید
هنگامی که خط مشی CORS ایجاد شد، راه های مختلفی وجود دارد که می توان آن را فعال کرد.
1️⃣ استفاده از میان افزار
اجزای میانافزار درخواستها و پاسخها را در ASP.NET Core مدیریت میکنند. CORS را می توان در میان افزار با استفاده از یک خط مشی نامگذاری شده یا یک خط مشی پیش فرض فعال کرد.
- سیاست نامگذاری شده: می توانید یک یا چند خط مشی نامگذاری شده را تعریف کنید و سپس با استفاده از نام خط مشی در میان افزار انتخاب کنید که کدام خط مشی اعمال شود.
app.UseCors("MyCorsPolicy");
- خط مشی پیش فرض: به جای تعیین نام خط مشی، می توانید یک خط مشی پیش فرض را تعریف کنید که برای هر درخواست اعمال می شود.
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins("https://example.com");
});
});
// ...
app.UseCors();
2️⃣ استفاده از مسیریابی نقطه پایانی
مسیریابی نقطه پایانی کنترل بیشتری بر مسیریابی برنامه فراهم می کند. می توانید CORS را برای مسیرهای خاص در برنامه خود فعال کنید.
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/test", TestAction).RequireCors("MyCorsPolicy");
endpoints.MapControllers().RequireCors("MyCorsPolicy");
});
3️⃣ با استفاده از [EnableCors]
صفت
را [EnableCors]
ویژگی به شما این امکان را می دهد که CORS را در سطح گرانول تری فعال کنید، به ویژه در سطح کنترل کننده یا عمل. این ویژگی جایگزینی برای اعمال سیاستهای CORS در سطح جهانی ارائه میکند و کنترل دقیقتری بر مکان و نحوه اجرای CORS در برنامه شما ارائه میدهد.
استفاده از [EnableCors]
ویژگی را می توان به چند روش انجام داد:
[EnableCors]
سیاست پیش فرض را اعمال می کند.[EnableCors("{Policy String}")]
یک خط مشی خاص با نام را اعمال می کند.
این ویژگی را می توان برای اجزای مختلف برنامه کاربردی شما اعمال کرد:
- Razor Page Model Page
- کنترل کننده
- روش عمل کنترلر
با استفاده از [EnableCors]
ویژگی، سیاست های مختلفی را می توان برای اجزای مختلف برنامه شما اعمال کرد. با این حال، توجه به این نکته مهم است که اگر [EnableCors]
ویژگی برای کنترلر، مدل صفحه یا روش عمل اعمال می شود در حالی که CORS در میان افزار نیز فعال است، هر دو سیاست اعمال خواهند شد. این می تواند منجر به رفتارهای ناخواسته و پیامدهای امنیتی شود، بنابراین ترکیب سیاست ها به طور کلی توصیه نمی شود. توصیه می شود از هر دو استفاده کنید [EnableCors]
ویژگی یا میان افزار، اما نه هر دو در یک برنامه.
[EnableCors("MyCorsPolicy")]
public class TestController : ControllerBase
{
// ...
}
در این مثال، “MyCorsPolicy” برای تمام اقدامات درون TestController اعمال می شود.
🔓 CORS را غیرفعال کنید
اگر میخواهید CORS را برای اقدامات یا کنترلکنندههای خاص غیرفعال کنید، میتوانید از آن استفاده کنید [DisableCors]
صفت.
[DisableCors]
public class NoCorsController : ControllerBase
{
// ...
}
⚠️ هشدار
را[DisableCors]
ویژگی CORS را که توسط مسیریابی نقطه پایانی فعال شده است غیرفعال نمی کند.
🔘 گزینه های معیار CORS
هنگام تعریف خطمشیهای CORS، میتوانید از چندین روش برای سفارشی کردن نحوه رفتار خطمشی استفاده کنید:
- WithOrigins: به شما امکان می دهد مشخص کنید که کدام منبع باید اجازه دسترسی به منابع را داشته باشد. این زمانی مفید است که بخواهید دسترسی به دامنه های خاصی را محدود کنید.
- WithMethods: به شما امکان می دهد تعیین کنید کدام روش HTTP مجاز است. این می تواند تنها با اجازه دادن به روش های لازم برای یک منبع خاص، به تقویت امنیت کمک کند.
- WithHeaders: به شما اجازه می دهد تا مشخص کنید کدام سرصفحه های HTTP مجاز هستند. این می تواند برای محدود کردن هدرهای پذیرفته شده در یک درخواست استفاده شود.
- AllowAnyOrigin: به درخواست های CORS از همه مبدا با هر طرحی اجازه می دهد (
http
یاhttps
). - AllowAnyMethod: هر روش HTTP را اجازه می دهد.
- AllowAnyHeader: به هر عنوان HTTP اجازه می دهد.
گزینه های AllowAny باید با احتیاط استفاده شوند زیرا می توانند خطرات امنیتی بالقوه ای ایجاد کنند، مانند اجازه دادن به هر منبعی برای دسترسی به منابع، اجازه دادن به روش های بالقوه مخرب یا منجر به قرار گرفتن در معرض ناخواسته هدرها.
این گزینه های خط مشی را می توان با توجه به نیازهای خاص برنامه شما ترکیب و تنظیم کرد و درجه بالایی از کنترل را بر سیاست های CORS شما ارائه می دهد. با این حال، درک مفاهیم امنیتی هر گزینه برای اطمینان از رسیدگی ایمن به درخواستهای متقاطع مهم است.
📝 نتیجه گیری
در نتیجه، درک و پیاده سازی CORS در ASP.NET Core برای امنیت برنامه های کاربردی وب شما بسیار مهم است. CORS مکانیزمی است که به وبسایت شما اجازه میدهد تا درخواستهای ایمن را به سایر دامنهها ارسال کند، قابلیت همکاری را افزایش داده و انعطافپذیری بیشتری را فراهم میکند. با این حال، مهم است که به یاد داشته باشید که CORS باید به دقت پیکربندی شود تا از آسیب پذیری های امنیتی احتمالی جلوگیری شود. بسیار مهم است که دسترسی را فقط به منابع قابل اعتماد محدود کنید و از محدودترین روش مناسب برای نیازهای خاص خود استفاده کنید. به لطف ASP.NET Core، پیکربندی CORS یک فرآیند ساده است که میتواند به راحتی برای موقعیتهای مختلف سفارشی شود.
📚 مراجع