Пример обеспечения безопасности веб-сервисов (WS) с использованием SOAP.

⚡ Умное резюме

Безопасность веб-сервисов (WS Security) — это стандарт, защищающий данные, которыми обмениваются во время вызова веб-сервиса SOAP. В этом ресурсе рассматриваются угрозы безопасности и меры противодействия, стандарты WS-Security, создание защищенного веб-сервиса с использованием учетных данных, а также лучшие практики обеспечения безопасности веб-сервисов.

  • 🔐 Основной стандарт: WS-Security добавляет уровень безопасности к SOAP, определяя, как учетные данные и ключи шифрования передаются внутри заголовка SOAP.
  • 🌐 Ограничения HTTPS: HTTPS/SSL обеспечивает безопасность трафика между двумя точками, но в многосерверных средах только WS-Security защищает сообщение от начала до конца.
  • 🎫 Учетные токены: Учетные данные передаются с использованием UsernameToken для имени пользователя и пароля или BinarySecurityToken для сертификатов Kerberos или X.509.
  • 🇧🇷 Пример безопасной сборки: Веб-сервис .NET ASMX добавляет класс AuthHeader, чтобы заголовок SOAP содержал имя пользователя и пароль для аутентификации.
  • 📋 лучшие практики: Запросы на аудит и ведение журналов, tracВ рамках бизнес-операций необходимо проводить надлежащую аутентификацию и никогда не хранить и не регистрировать конфиденциальные учетные данные.

Безопасность веб-сервиса WS

Что такое безопасность WS?

WS Security — это стандарт, обеспечивающий безопасность при обмене данными в рамках веб-сервиса. Это ключевая особенность SOAP, благодаря которой он очень популярен для создания веб-сервисов.

Безопасность — важная составляющая любого веб-приложения. Поскольку почти все веб-приложения доступны через интернет, всегда существует вероятность угроз безопасности. Поэтому при разработке веб-приложений необходимо учитывать следующее:ping При разработке веб-приложений всегда рекомендуется учитывать требования безопасности при их проектировании и создании.

Угрозы безопасности и меры противодействия

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

Одним из способов обеспечения безопасности HTTP является протокол HTTPS. HTTPS — это безопасный способ связи между клиентом и сервером через Интернет. HTTPS использует протокол SSL (Secure Sockets Layer) для защиты данных. И клиент, и сервер имеют цифровой сертификат, подтверждающий их подлинность при любой связи между ними.

Угрозы безопасности и меры противодействия HTTPS

В стандартном HTTPS-соединении между клиентом и сервером выполняются следующие шаги:

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

Однако описанный выше тип безопасности не будет работать во всех ситуациях. Может возникнуть ситуация, когда клиент взаимодействует с несколькими серверами одновременно. В приведенном ниже примере показано, как клиент одновременно взаимодействует с базой данных и веб-сервером. В таких случаях не вся информация может передаваться по протоколу HTTPS.

Угрозы безопасности и меры противодействия на нескольких серверах

Именно здесь вступает в действие SOAP, помогая преодолеть подобные препятствия благодаря спецификации WS Security. В соответствии с этой спецификацией все данные, связанные с безопасностью, определяются в элементе заголовка SOAP. Элемент заголовка может содержать следующую информацию:

  1. Если сообщение в теле SOAP было подписано каким-либо ключом безопасности, этот ключ можно определить в элементе заголовка.
  2. Если какой-либо элемент в теле SOAP-сообщения зашифрован, заголовок будет содержать необходимые ключи шифрования, чтобы сообщение можно было расшифровать по достижении пункта назначения.

В многосерверной среде описанный выше метод аутентификации SOAP помогает следующим образом:

  • Поскольку тело SOAP зашифровано, его сможет расшифровать только веб-сервер, на котором размещен веб-сервис. Это связано с тем, как устроен протокол SOAP.
  • Предположим, сообщение передается на сервер базы данных в HTTP-запросе; его невозможно расшифровать, поскольку база данных не располагает необходимыми для этого механизмами.
  • Только когда запрос фактически достигнет веб-сервера по протоколу SOAP, он сможет расшифровать сообщение и отправить соответствующий ответ обратно клиенту.

В последующих разделах мы рассмотрим, как можно использовать стандарт WS Security для следующих целей: SOAP-.

Стандарты безопасности веб-сервисов

Как обсуждалось в предыдущем разделе, стандарт WS-Security основан на включении определения безопасности в заголовок SOAP. Учетные данные в заголовке SOAP обрабатываются двумя способами.

Во-первых, он определяет специальный элемент под названием UsernameToken. Он используется для передачи имени пользователя и пароля веб-сервису. Другой способ — использование бинарного токена через BinarySecurityToken. Это используется в ситуациях, когда применяются методы шифрования, такие как Kerberos или X.509.

Приведенная ниже диаграмма иллюстрирует принцип работы модели безопасности в WS Security.

Рабочий процесс стандартов безопасности веб-сервисов

Ниже описаны этапы, которые выполняются в рамках вышеописанного рабочего процесса:

  1. Запрос может быть отправлен от клиента веб-сервиса к службе токенов безопасности. Эта служба может представлять собой промежуточный веб-сервис, специально созданный для предоставления имен пользователей/паролей или сертификатов фактическому веб-сервису SOAP.
  2. Затем маркер безопасности передается клиенту веб-службы.
  3. Затем клиент веб-сервиса вызывает веб-сервис, но на этот раз гарантирует, что токен безопасности будет встроен в SOAP-сообщение.
  4. Затем веб-служба понимает сообщение SOAP с токеном аутентификации и затем может связаться со службой токенов безопасности, чтобы узнать, является ли токен безопасности подлинным или нет.

Приведённый ниже фрагмент кода демонстрирует формат части аутентификации, являющейся частью документа WSDL. Исходя из этого фрагмента, SOAP-сообщение будет содержать два дополнительных элемента: имя пользователя и пароль.

<xs:element name="UsernameToken">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="Username"/>
         <xs:element ref="Password" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="Id" type="xs:ID"/>
   </xs:complexType>
</xs:element>

Когда SOAP-сообщение фактически передается между клиентами и сервером, часть сообщения, содержащая учетные данные пользователя, может выглядеть так, как показано выше. Имя элемента wsse — это специальное имя элемента, определенное для SOAP, и означает, что оно содержит информацию, связанную с безопасностью.

Как создавать безопасные веб-сервисы

Теперь рассмотрим пример обеспечения безопасности веб-сервиса SOAP. Мы построим систему безопасности веб-сервиса на основе примера, продемонстрированного ранее в главе о SOAP, и добавим к нему уровень безопасности.

В нашем примере мы создадим простой веб-сервис, который будет возвращать строку приложению, вызывающему этот веб-сервис. Но на этот раз при вызове веб-сервиса необходимо будет передать учетные данные вызывающему сервису. Давайте выполним следующие шаги, чтобы создать наш SOAP-веб-сервис и добавить к нему определение безопасности.

Шаг 1) Первым шагом является создание пустого Асп.Нет Веб приложение. В Visual Studio 2013 выберите пункт меню Файл->Новый проект.

Создание безопасных веб-сервисов — новый проект

После того, как вы нажмете опцию «Новый проект», Visual Studio откроет вам другое диалоговое окно для выбора типа проекта и предоставления необходимых сведений о проекте. Это объясняется на следующем этапе.

Шаг 2) На этом этапе

  1. Убедитесь, что вы сначала выбрали C# Шаблон веб-приложения для ASP.NET. Проект должен быть именно такого типа, чтобы создать проект веб-сервисов. Выбрав этот вариант, Visual Studio выполнит необходимые шаги для добавления требуемых файлов, необходимых для любого веб-приложения.
  2. Дайте название вашему проекту, которое в нашем случае было указано как «веб-сервис.asmxЗатем обязательно укажите место, где будут храниться файлы проекта.

Подробности проекта «Создание безопасных веб-сервисов»

После завершения процесса вы увидите созданный файл проекта в обозревателе решений Visual Studio 2013.

Инструмент для создания безопасных веб-сервисов

Шаг 3) На этом этапе мы добавим в наш проект файл веб-сервиса.

  1. Сначала щелкните правой кнопкой мыши по файлу проекта, как показано ниже.

Создание защищенных веб-сервисов с помощью проекта, загружаемого по щелчку правой кнопкой мыши.

  1. После щелчка правой кнопкой мыши по файлу проекта у вас появится возможность выбрать опцию «Добавить -> Веб-служба (ASMX)», чтобы добавить файл веб-службы. Просто укажите имя файла веб-службы как Tutorial Service.

Создание безопасных веб-сервисов, добавление веб-сервиса

На описанном выше шаге появится диалоговое окно, в котором можно ввести имя файла веб-службы. Поэтому в приведенном ниже диалоговом окне введите имя файла TutorialService.

Диалоговое окно «Создать диалоговое окно с именем защищенных веб-сервисов»

Шаг 4) Добавьте следующий код в asmx-файл Tutorial Service. Приведенный ниже фрагмент кода используется для добавления пользовательского класса, который будет использоваться для изменения заголовка SOAP при создании сообщения SOAP. Поскольку теперь мы хотим добавить учетные данные безопасности в заголовок SOAP, этот шаг является обязательным.

Создайте безопасный код для заголовка аутентификации веб-сервисов.

      return "This is a Guru99 Web Service";
   }

   public class AuthHeader : SoapHeader
   {
      public string UserName;
      public string Password;
   }
}

Code Объяснение:

  1. Сейчас мы создаем отдельный класс под названием Аутхедер который имеет тип Класс SoapHeaderЧтобы изменить параметры, передаваемые в SOAP-заголовке, необходимо создать класс, использующий встроенный класс SoapHeader в .NET. Настроив SOAP-заголовок, мы теперь можем передавать «Имя пользователя» и «Пароль» при вызове веб-сервиса.
  2. Затем мы определяем переменные «Имя пользователя» и «Пароль», которые имеют строковый тип. Они будут использоваться для хранения значений имени пользователя и пароля, которые передаются веб-службе.

Шаг 5) В качестве следующего шага необходимо добавить следующий код в тот же файл: Файл TutorialService.asmxЭтот код фактически определяет функцию нашего веб-сервиса. Эта функция возвращает строку «This is a GuruКлиенту будет отправлена ​​строка "99 Веб-сервис". Но на этот раз строка будет возвращена только в том случае, если клиентское приложение передаст учетные данные веб-сервису.

Учебное пособие по созданию безопасных веб-сервисов. Код сервиса.

public class TutorialService : System.Web.Services.WebService
{
   public AuthHeader Credentials;

   [SoapHeader("Credentials")]

   [WebMethod]
   public string Guru99WebService()
   {

      if (Credentials.UserName.ToLower() != "Guru99" ||
      Credentials.Password.ToLower() != "Guru99Password")
      {
         throw new SoapException("Unauthorized",
         SoapException.ClientFaultCode);
      }
      else
      return "This is a Guru99 Web service";
   }

Code Объяснение:

  1. Здесь мы создаем объект класса AuthHeader, созданный на предыдущем шаге. Этот объект будет передан нашему Guru99Webservice в котором имя пользователя и пароль можно внимательно изучить.
  2. Атрибут [SoapHeader] теперь используется для указания того, что при вызове веб-службы необходимо передать имя пользователя и пароль.
  3. В этом блоке кода мы фактически проверяем имя пользователя и пароль, передаваемые при вызове веб-сервиса. Если имя пользователя равно "Guru99” и пароль равен “Guru«99Password», затем сообщение «Это GuruКод "99 Веб-сервис" передается клиенту. В противном случае, если будут переданы неверные идентификатор пользователя и пароль, клиенту будет отправлена ​​ошибка.

Если код выполнен успешно, при запуске кода в браузере будет отображен следующий вывод.

Выход:

Создание защищенных выходных данных веб-сервисов

Приведённый выше результат отображается при запуске программы, что означает, что веб-сервис теперь доступен. Давайте щёлкнем по ссылке «Сервис». Descriptионная связь.

Описание службы «Создание безопасных веб-сервисов»

Из описания сервиса вы теперь увидите, что имя пользователя и пароль являются элементами WSDL файл. Эти параметры необходимо отправлять при вызове веб-службы.

Лучшие практики безопасности веб-сервисов

Ниже перечислены аспекты безопасности, которые следует учитывать при работе с веб-сервисами:

  1. Аудит и ведение журналов – Используйте журналирование приложений для регистрации всех запросов, поступающих к веб-сервисам. Это позволит получить подробный отчет о том, кто обращался к веб-сервису, и поможет в анализе последствий в случае нарушения безопасности.
  2. Последовательность обращений к веб-сервису – Постарайтесь отследить поток вызовов в веб-сервисах. По умолчанию приложение может вызывать несколько запросов к веб-сервисам, передавая между ними токены аутентификации. Все вызовы между веб-сервисами необходимо отслеживать и регистрировать.
  3. Конфиденциальная информация – Не включайте в записи журнала конфиденциальную информацию, такую ​​как пароли, номера кредитных карт или любую другую секретную информацию. Если событие содержит такую ​​информацию, ее необходимо удалить перед записью в журнал.
  4. Track Бизнес Operaных – Track значимых бизнес-операций. Например, оснастите ваше приложение средствами для записи доступа к особо конфиденциальным методам и бизнес-логике. Возьмем в качестве примера интернет-магазин.ping Приложение. Типичное приложение включает в себя несколько этапов, таких как выбор товаров для покупки, добавление товаров в корзину и, наконец, окончательная покупка. Весь этот бизнес-процесс необходимо... tracполучено через веб-сервис.
  5. Правильная аутентификация – Аутентификация — это механизм, с помощью которого клиенты могут установить свою личность в веб-сервисе, используя определенный набор учетных данных, подтверждающих эту личность. Никогда не следует хранить учетные данные пользователя, поэтому, если для вызова веб-сервиса используется WS Security, необходимо отметить, что веб-сервис не должен хранить учетные данные, отправляемые в заголовке SOAP. Веб-сервис должен их удалить.

Часто задаваемые вопросы (FAQ)

Искусственный интеллект может отслеживать трафик веб-сервисов в режиме реального времени, выявлять необычные шаблоны запросов и отмечать вероятные атаки, такие как внедрение кода или злоупотребление токенами. Он также может сканировать конфигурации WSDL и SOAP на предмет слабой аутентификации или отсутствия шифрования.

Да. Модели машинного обучения, обученные на обычном трафике, могут выявлять аномалии, такие как подбор учетных данных, некорректные заголовки SOAP или атаки повторного воспроизведения. Тем не менее, группам безопасности следует проверять оповещения перед блокировкой запросов, чтобы избежать сбоев в работе легитимных клиентов.

HTTPS шифрует соединение между двумя точками, поэтому данные становятся доступны только после достижения промежуточного сервера. WS-Security защищает само SOAP-сообщение, обеспечивая безопасность.ping Это обеспечивает сквозную защиту, даже при прохождении через несколько серверов.

UsernameToken — это элемент WS-Security, помещаемый в заголовок SOAP, который содержит имя пользователя и, при необходимости, пароль. Он позволяет веб-сервису аутентифицировать вызывающего пользователя перед обработкой запроса.

Подведем итог этой публикации следующим образом: