Обработка запросов с данными в формате XML

ID статьи: 3413
Последнее обновление: 07 Oct, 2026
Documentation:
Product: WAF
Version: 7.7.x

Веб-сервисы и API могут обмениваться данными в формате XML. Если UserGate WAF будет обрабатывать тело HTTP-запроса как обычный текст, не учитывая структуру XML, это может привести к пропуску угроз, включая XXE-атаки, XPath-инъекции и скрытые XSS-полезные нагрузки в элементах и атрибутах. Для корректной проверки таких запросов UserGate WAF выполняет разбор тела запроса и проверяет соответствие данных структуре XML. Эти параметры настраиваются в XML-профилях.

XML-профиль, подключенный к правилу публикации, обеспечивает:

  • пропуск только легитимных запросов с данными в формате XML;

  • проверку соответствия данных заданным XML-схемам (или XSD-схемам) и отклонение запросов с нестандартной структурой;

  • контроль размера, сложности и глубины вложенности данных с помощью лимитов;

  • разбор (парсинг) структуры XML для последующей проверки тела запроса WAF-правилами;

  • журналирование событий, связанных с проверкой данных в формате XML.

О данных в формате XML

XML (Extensible Markup Language) — это расширяемый язык разметки для представления структурированных данных. В HTTP‑запросах данные в формате XML обычно приходят в теле запроса с заголовком Content-Type: application/xml или более специфичным, например application/soap+xml или application/rss+xml.

Пример HTTP-запроса с XML

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 200

<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user id="123">
    <name>Ivan</name>
    <role>admin</role>
  </user>
  <user id="200">
    <name>Anna</name>
    <role>user</role>
  </user>
</users>

Основными элементами структуры XML являются:

  • XML‑декларация: — указывает версию и кодировку (необязательный элемент). В примере: <?xml version="1.0" encoding="UTF-8"?>. UserGate WAF может использовать ее для проверки согласованности с заголовками.

  • Корневой элемент — элемент, который охватывает весь документ. В примере это <users>. Корень в документе ровно один — двух корневых элементов быть не может.

  • Элемент — пара открывающего и закрывающего тегов с содержимым (<name>Ivan</name>) либо самозакрывающийся тег без содержимого (<name/>).

  • Вложенность — элементы образуют дерево: <name>, <role> вложены в <user> и являются его дочерними элементами. В свою очередь элементы <user> вложены в <users>.

  • Атрибут — пара «ключ — значение» внутри открывающего тега, значение всегда в кавычках: <user id="123">.

Принцип проверки HTTP-запросов с телом в формате XML

Если к правилу публикации подключен только XML-профиль, проверка выполняется последовательно: сначала проверяется заголовок Content-Type или формат тела запроса, затем — заданные лимиты и соответствие XML-схемам. Парсинг XML и проверка тела запроса на соответствие XML-схемам выполняются только в том случае, если в профиле настроен хотя бы один лимит или хотя бы одна XML-схема. Само по себе указание заголовка Content-Type не запускает проверку структуры XML.

1. Проверка заголовка Content-Type

Если в XML-профиле указан заголовок Content-Type, UserGate WAF проверяет, соответствует ли ему заголовок запроса. Если заголовок запроса не соответствует заданному значению, запрос пропускается этим профилем и может быть проверен другими профилями или правилами публикации.

Если заголовок Content-Type не указан, UserGate WAF проверяет, соответствует ли тело запроса формату XML:

  • если тело не является XML, запрос пропускается этим профилем;

  • если тело является XML, UserGate WAF переходит к проверке лимитов.

2. Проверка лимитов

Если в XML-профиле настроены лимиты для тела запроса, UserGate WAF проверяет их соблюдение:

  • если лимиты превышены и для профиля выбрано действие Deny, запрос отклоняется, дальнейшая проверка запроса в рамках текущего правила публикации прекращается;

  • если лимиты превышены и для профиля выбрано действие Pass, запрос передается на проверку по XML-схеме;

  • если лимиты не превышены, запрос передается на проверку по XML-схеме.

Если лимиты не настроены, этот этап пропускается, а запрос передается на проверку по XML-схеме.

3. Проверка соответствия XML-схеме

Если в XML-профиле указаны XML-схемы, UserGate WAF разбирает тело запроса, проверяет его структуру и сопоставляет ее с заданными схемами.

  • если запрос не соответствует схемам и выбрано действие Deny, UserGate WAF отклоняет запрос, дальнейшая проверка запроса в рамках текущего правила публикации прекращается;

  • если запрос не соответствует схемам и выбрано действие Pass, запрос пропускается и передается на проверку другими правилами публикации, если они предусмотрены в конфигурации политики безопасности;

  • если запрос соответствует схемам, он пропускается и может быть проверен другими профилями или правилами публикации, если они предусмотрены в конфигурации политики безопасности.

Если в XML-профиле не указаны XML-схемы, запрос пропускается и передается на проверку другими правилами публикации, если они предусмотрены в конфигурации политики безопасности. 

Порядок совместной проверки запроса XML-профилем и WAF-профилем

Если к правилу публикации подключен только XML-профиль, UserGate WAF будет фильтровать запросы в соответствии с настроенной конфигурацией XML-профиля.

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

Правило публикации, в котором одновременно подключены WAF‑профиль (для проверки экспертными WAF‑правилами) и XML‑профиль (для парсинга и проверки XML), обрабатывает запрос в несколько этапов, порядок которых определяется параметрами XML‑профиля.

Порядок проверки зависит от того, какие параметры проверки указаны в XML‑профиле: значение заголовка Content-Type, лимиты на данные, XML-схема. WAF‑профиль при этом отвечает за проверку по экспертным правилам (заголовки, параметры, тело), а XML‑профиль — за парсинг, лимиты и проверку по схеме.

Рассмотрим проверку запроса на примере, когда к правилу публикации подключены WAF‑профиль и XML‑профиль и в XML‑профиле указаны:

  • значение заголовка Content-Type;

  • лимиты на данные (например, максимальный размер тела);

  • XML-схема.

Тогда проверка запроса будет выполняться в следующем порядке:

1. Проверка соответствия заголовка Content-Type и лимитов (XML‑профиль).
Когда поступает запрос, система сначала сверяет значение заголовка Content-Type с тем, что указано в XML‑профиле.

  • если Content-Type соответствует указанному в XML‑профиле, проверяются лимиты на тело запроса;

  • если лимиты превышены и в XML‑профиле выбрано блокирующее действие Deny, запрос отклоняется сразу, с возвратом ответа, если в XML‑профиле был указан профиль ответа. Дальнейшая проверка не проводится.

2. Проверка заголовков (WAF‑профиль).
Если лимиты не превышены, далее WAF‑профилем проверяются заголовки, при условии что правило публикации настроено на проверку заголовков. Если эта проверка не блокирует запрос, управление возвращается XML‑профилю для продолжения проверки тела.

3. Проверка тела запроса (XML‑профиль, затем WAF‑профиль).
XML‑профиль продолжает проверку тела: выполняет парсинг XML, проверяет структуру, сопоставляет со схемой. Если после этой проверки запрос не заблокирован, проверка тела продолжается WAF‑профилем по экспертным WAF‑правилам.

Таким образом, при наличии и WAF‑профиля, и XML‑профиля в одном правиле публикации запрос проходит последовательную цепочку: сначала условия и лимиты XML‑профиля, затем (если не было блокировки) заголовки через WAF‑профиль, затем тело через XML‑профиль и, наконец, через WAF‑профиль.

Настройка и подключение XML-профиля

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

Создание XML-профиля

Важно!Чтобы XML-профиль выполнял проверку запросов, в нем необходимо указать хотя бы один лимит или добавить хотя бы одну XML-схему.

Чтобы создать XML-профиль:

1. На странице Настройки в разделе Политика безопасности ➜ Профили безопасности ➜ XML-профили нажмите Добавить.

2. В окне Свойства XML-профиля на вкладке Общие выполните следующие действия:

  • укажите название профиля и при необходимости описание;

  • при необходимости выберите профиль ответа, который вернется клиенту, если запрос будет заблокирован профилем;

  • выберите действие, которое будет выполняться в отношении трафика при ошибке парсинга или выходе за пределы лимитов;

  • при необходимости включите журналирование событий.

3. На вкладке Content-type укажите одно или несколько значений заголовка Content-type. Для запросов с этим значением в заголовке будет выполняться проверка на соответствие формату XML.

ПримечаниеЕсли не выбрано ни одно значение, проверку на соответствие формату XML будут проходить все входящие запросы.

4. На вкладке Лимиты укажите максимальное значение для одного или нескольких лимитов:

  • размер тела формата XML в байтах;

  • глубина вложенности элементов;

  • количество элементов «ключ: значение» в объекте;

  • количество атрибутов;

  • количество символов в имени ключа;

  • длина имени атрибута;

  • длина текстового значения;

  • длина значения атрибута.

5. На вкладке XML-схемы при необходимости добавьте хотя бы одну XML-схему для проверки соответствия запросов необходимым требованиям. Подробнее о создании XML-схем — в разделе «XML-схемы»

6. Если вы добавили несколько схем, выберите, требуется ли проверять соответствие хотя бы одной XML-схеме или всем добавленным.

7. Сохраните изменения.

Подключение XML-профиля к правилу публикации

Чтобы подключить XML-профиль к правилу публикации:

1. На странице Настройки в разделе Политика сервисов ➜ Правила публикации создайте или выберите правило публикации. Подробнее — в разделе «Публикация веб-сервисов».

2. На вкладке Профили безопасности установите флажок Включить проверку данных в формате XML и выберите из списка нужный XML-профиль.

ПримечаниеЕсли нужного профиля нет в списке, вы можете создать его, нажав в конце списка «Создать и выбрать новый объект».

3. Завершите настройку других параметров правила публикации и сохраните изменения.

Правило публикации настроено на проверку данных в формате XML. Если в XML-профиле включено журналирование, события, связанные с обработкой запросов с данными в формате XML, отображаются на странице Атаки. Подробнее об этом — в разделе «Просмотр обнаруженных атак».

Эта статья была:   Полезна | Не полезна
ID статьи: 3413
Последнее обновление: 07 Oct, 2026
Ревизия: 31
Просмотры: 39
Комментарии: 0