۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

چگونه امنیت API را در ASP.NET Core بهبود دهیم

از احراز هویت و مجوز، کلیدهای API، محدودیت نرخ، CORS، نسخه‌سازی API و سایر روش‌های توصیه‌شده برای ایجاد APIهای امن و قوی در ASP.NET Core استفاده کنید.

از احراز هویت و مجوز، کلیدهای API، محدودیت نرخ، CORS، نسخه‌سازی API و سایر روش‌های توصیه‌شده برای ایجاد APIهای امن و قوی در ASP.NET Core استفاده کنید.

از آنجایی که APIهای ما داده‌های خصوصی و حساس را مدیریت می‌کنند، ضروری است که استراتژی‌های اثبات شده را برای ایمن کردن آنها اتخاذ کنیم. ما راه‌های زیادی برای ایمن‌سازی APIها داریم، با فایروال کردن آنها در پشت دروازه API و دسترسی به آنها از طریق اتصالات امن شروع می‌شود.

در این مقاله ما چندین روش را که توسعه‌دهندگان می‌توانند امنیت API را بهبود بخشند، مانند استفاده از احراز هویت و مجوز، محدود کردن نرخ، نسخه‌سازی API، و ثبت و نظارت، و نحوه پیاده‌سازی این موارد در برنامه‌های ASP.NET Core 7 مورد بحث قرار خواهیم داد.

برای استفاده از نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنید

ابتدا، اجازه دهید یک پروژه ASP.NET Core 7 Web API در Visual Studio 2022 ایجاد کنیم. مراحل ذکر شده در زیر را دنبال کنید.

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، کادر «استفاده از کنترل‌کننده‌ها (برای استفاده از حداقل API‌ها علامت آن را بردارید» علامت بزنید. ما از حداقل API در این پروژه استفاده نخواهیم کرد.
  9. در جای دیگری از پنجره «اطلاعات اضافی»، «نوع احراز هویت» را روی «هیچ‌کدام» (پیش‌فرض) بگذارید و مطمئن شوید که کادرهای «فعال کردن پشتیبانی باز API»، «پیکربندی برای HTTPS» و «فعال کردن داکر» را انتخاب کنید. ” بدون علامت باقی می ماند. ما از هیچ یک از این ویژگی ها در اینجا استفاده نخواهیم کرد.
  10. روی ایجاد کلیک کنید.
نحوه اجرای R در کد ویژوال استودیو

ما از این پروژه ASP.NET Core Web API برای کار با نمونه‌های کد در بخش‌های زیر استفاده خواهیم کرد.

امنیت API چیست؟ چرا مهم است؟

یک رابط برنامه نویسی برنامه (API) مکانیزمی است که از طریق آن یک جزء نرم افزاری با اجزای دیگر تعامل یا تبادل داده می کند. APIها برای اتصال کلاینت‌های موبایل و وب با قسمت پشتی بسیاری از برنامه‌ها و برای انتقال داده‌ها بین سرورها و کلاینت‌ها از طریق شبکه‌های عمومی استفاده می‌شوند. در نتیجه، API ها اغلب به هدفی برای هکرها تبدیل می شوند.

امنیت API شامل خط‌مشی‌ها، دستورالعمل‌ها و رویه‌هایی است که می‌توانیم برای محافظت از APIها در برابر آسیب‌پذیری‌های امنیتی و حملات مخرب اتخاذ کنیم. با افزایش تعداد دستگاه‌های متصل و افزایش پذیرش میکروسرویس‌ها و معماری‌های بدون سرور، تعداد APIها در برنامه‌های امروزی افزایش یافته است.

کسب و کارهای امروزی از API برای اتصال خدمات و انتقال داده استفاده می کنند. اگر API های شما به خطر بیفتد، داده های حساس در برنامه شما نیز به خطر می افتد. علاوه بر محافظت از داده های حساس برنامه خود در برابر نقض، می توانید از امنیت API برای جلوگیری از تزریق SQL، برنامه نویسی بین سایتی (XSS) و سایر حملات استفاده کنید.

در بخش‌های بعدی، استراتژی‌های کلیدی را که می‌توانیم برای ایمن کردن APIها در برنامه‌های ASP.NET Core دنبال کنیم، بررسی خواهیم کرد.

از احراز هویت و مجوز استفاده کنید

برای ایمن سازی API های خود، می توانید از احراز هویت و مجوز استفاده کنید. در حالی که احراز هویت برای تأیید هویت یک کاربر استفاده می شود، مجوز برای اعطا یا لغو دسترسی به منابع خاص در برنامه بر اساس امتیازات دسترسی کاربر استفاده می شود. قطعه کد زیر نشان می دهد که چگونه می توانید یک کاربر را در برنامه ASP.NET Core 7 خود مجوز دهید.

[ApiController]
[Route("api/[controller]")]
public class DemoController : ControllerBase
{
    [Authorize]
    [HttpGet]
    public IActionResult Get()
    {
        //Write your usual code here
        return Ok("Can be accessed only by authenticated users.");
    }
}

استفاده از احراز هویت مبتنی بر نشانه

یکی دیگر از تکنیک‌های مورد استفاده برای احراز هویت کاربران در یک برنامه، احراز هویت مبتنی بر نشانه است. در اینجا یک توکن منحصر به فرد برای هر کاربر احراز هویت شده تولید می شود، به عنوان مثال، رمز پس از تأیید هویت کاربر تولید می شود. به طور معمول، ما از توکن های JWT برای احراز هویت مبتنی بر نشانه استفاده می کنیم. برای همه درخواست‌های بعدی به API، رمز همراه با درخواست ارسال می‌شود، ترجیحاً در هدر درخواست.

C# 10 مایکروسافت کد "زیباتر" را نوید می دهد

از کلیدهای API استفاده کنید

همچنین می‌توانید از کلیدهای API برای احراز هویت کاربران در یک برنامه استفاده کنید. کلیدهای API شناسه‌های منحصربه‌فردی هستند که در هدر درخواست در هر تماس با API ارسال می‌شوند. قطعه کد زیر نشان می دهد که چگونه می توانید یک کلید API را در برنامه ASP.NET Core 7 تأیید کنید.

[ApiController]
[Route("api/[controller]")]
public class DemoController : ControllerBase
{
    private const string API_KEY = "ABCDE12345"; //This is your API key
    [HttpGet]
    public IActionResult Get()
    {
        var apiKey = Request.Headers["Api_Key"].FirstOrDefault();
        if (apiKey != API_KEY)
            return Unauthorized();
        //Write your usual code here
        return Ok("The API key is valid.. Authenticated successful.");
    }
}

از محدودیت نرخ استفاده کنید

می‌توانید از مزیت محدودیت نرخ برای محافظت از API خود در برابر حملات brute-force استفاده کنید. محدود کردن نرخ تکنیکی است که به شما امکان می دهد تعداد تماس ها را به نقطه پایانی API در یک بازه زمانی معین محدود کنید. می توانید از نرخ هسته ASP.NET استفاده کنید محدود کردن میان افزار برای اجرای محدودیت نرخ در برنامه های ASP.NET Core 7 شما.

استفاده از اشتراک‌گذاری منابع متقاطع (CORS)

می توانید از CORS برای جلوگیری از دسترسی غیرمجاز به API های خود از سایر دامنه ها استفاده کنید. قطعه کد زیر نشان می دهد که چگونه می توانید CORS را در سطح عمل در یک برنامه ASP.NET Core 7 فعال کنید.

public class BookController : ApiController
{
   [EnableCors(origins: "http://localhost:8095/",
    headers: "*", methods: "*")]
   public IEnumerable<string> Get()
   {
        return new string[] { "Mastering C# 8.0", "Joydip Kanjilal" };
   }
}

از نسخه‌سازی API استفاده کنید

همچنین می‌توانید با نسخه‌سازی APIهای خود امنیت را بهبود بخشید. نسخه‌سازی به شما امکان می‌دهد تغییراتی در API خود ایجاد کنید و نسخه‌های کمتر امن API را بدون شکستن کلاینت‌های موجود منسوخ کنید. ASP.NET Core از نسخه‌سازی API خارج از جعبه پشتیبانی می‌کند. برای استفاده از نسخه API، تنها کاری که باید انجام دهید این است که نسخه API ASP.NET را نصب کنید. بسته از NuGet. قطعه کد زیر نشان می دهد که چگونه می توانید از ویژگی MapToApiVersion در یک روش اقدام استفاده کنید.

[HttpGet]
[MapToApiVersion("3.0")]
public string Get()
{
   return books;
}

از ورود به سیستم و نظارت استفاده کنید

ثبت نام برای ارائه بینش عمیق تر در مورد رفتار برنامه شما ضروری است. نظارت نیز در تشخیص و شناسایی خرابی های برنامه از اهمیت بالایی برخوردار است. با استفاده از گزارش‌گیری و نظارت جامع، می‌توانید تصویر واضحی از استفاده از API به دست آورید و نقض‌های امنیتی احتمالی و مشکلات عملکرد مرتبط با API خود را کشف کنید.

چگونه هوش مصنوعی مولد کمبود استعداد توسعه دهندگان را ایجاد می کند

شما می توانید از میان تعدادی فریم ورک برای پیاده سازی ورود به سیستم در برنامه هسته ای ASP.NET خود انتخاب کنید، از جمله Microsoft.Extensions.Logging، NLog، Apache log4net و Serilog. قطعه کد زیر نشان می‌دهد که چگونه می‌توانید از مزایای لاگر پیش‌فرض داخلی در ASP.NET Core برای ثبت داده‌ها در روش‌های اقدام خود استفاده کنید.

public class DemoController: Controller
{
  private readonly ILogger _logger;
  public DemoController(ILogger <DemoController> logger)
  {
    _logger = logger;
  }
  public IActionResult Index()
  {
    _logger.LogInformation("Inside the Index action method");
    return View();
  }
  public IActionResult Test()
  {
    _logger.LogInformation("Inside the Test action method");
    return View();
  }
}

توصیه های دیگر

امنیت API به طور مداوم در حال تغییر است. از این رو، در نظر گرفتن امنیت API در هر مرحله از فرآیند توسعه و همگامی با تهدیدات فعلی و بهترین شیوه ها بسیار مهم است. همچنین باید یک استراتژی آزمایشی در اختیار داشته باشید و APIهای خود را برای شناسایی آسیب‌پذیری‌های امنیتی آزمایش کنید.

شما باید فقط داده هایی را که نیاز دارید و فقط تا زمانی که به آنها نیاز دارید ذخیره کنید. به طور منظم داده های قدیمی یا غیر ضروری را تمیز کنید. شما باید وابستگی های برنامه خود را به طور منظم به روز کرده و وصله کنید. علاوه بر این، می‌توانید از احراز هویت دو مرحله‌ای استفاده کنید، رمزهای عبور ذخیره‌شده را با استفاده از هش ایمن کنید و اصل کمترین دانش را برای ارائه تنها دسترسی ضروری پیاده‌سازی کنید.