Как улучшить безопасность API в ASP.NET Core

автор vadim


Поскольку наши API обрабатывают частные и конфиденциальные данные, крайне важно использовать проверенные стратегии для их защиты. У нас есть много способов защитить API, начиная с защиты их брандмауэром за шлюзом API и доступа к ним через безопасные соединения.

В этой статье мы обсудим несколько способов, с помощью которых разработчики могут улучшить безопасность API, например, с помощью проверки подлинности и авторизации, ограничения скорости, управления версиями API, а также ведения журналов и мониторинга, а также способы их реализации в приложениях ASP.NET Core 7.

Чтобы использовать примеры кода, представленные в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.

Создайте проект веб-API ASP.NET Core в Visual Studio 2022.

Прежде всего давайте создадим проект веб-API ASP.NET Core 7 в Visual Studio 2022. Выполните действия, описанные ниже.

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В следующем окне «Дополнительная информация» оставьте флажок «Использовать контроллеры (снимите флажок, чтобы использовать минимальные API)». В этом проекте мы не будем использовать минимальные API.
  9. В другом месте окна «Дополнительная информация» оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию) и убедитесь, что флажки «Включить поддержку Open API», «Настроить HTTPS» и «Включить Docker» остаются снятыми. Мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

Мы будем использовать этот проект веб-API ASP.NET Core для работы с примерами кода в разделах ниже.

Что такое безопасность 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 токен передается вместе с запросом, желательно в заголовке запроса.

Используйте ключи 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 от атак методом перебора. Ограничение скорости — это метод, позволяющий ограничить количество вызовов конечной точки API в течение заданного периода времени. Вы можете использовать промежуточное программное обеспечение ограничения скорости ASP.NET Core для реализации ограничения скорости в приложениях 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, все, что вам нужно сделать, это установить пакет управления версиями ASP.NET API из NuGet. В следующем фрагменте кода показано, как можно использовать атрибут MapToApiVersion в методе действия.

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

Используйте ведение журнала и мониторинг

Ведение журнала является неотъемлемой частью обеспечения более глубокого понимания поведения вашего приложения. Мониторинг также имеет первостепенное значение для обнаружения и идентификации сбоев приложений. Используя комплексное ведение журнала и мониторинг, вы сможете получить четкое представление об использовании API и выявить потенциальные нарушения безопасности и проблемы с производительностью, связанные с вашим API.

Вы можете выбрать одну из нескольких платформ для реализации ведения журналов в своем приложении ASP.NET Core, включая 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 для выявления уязвимостей безопасности.

Вы должны хранить только те данные, которые вам нужны, и только до тех пор, пока они вам нужны. Регулярно очищайте старые или ненужные данные. Вам следует регулярно обновлять и исправлять зависимости вашего приложения. Кроме того, вы можете воспользоваться преимуществами двухфакторной аутентификации, защитить сохраненные пароли с помощью хеширования и реализовать принцип наименьшего знания, чтобы обеспечить только необходимый доступ.

Related Posts

Оставить комментарий