XML-условие предназначено для проверки конкретного значения внутри XML-тела запроса: узла, атрибута, элемента списка или значения по XPath.
Описание XML-условия
Тип тела и Content-Type
Для данных внутри XML-документа используется «Содержание запроса» → «XML». Обычный текст, формы и multipart-запросы проверяются другими типами условий.
|
Сценарий |
Тип условия |
|---|---|
|
Проверка значения внутри XML-документа |
«Содержание запроса» → «XML» |
|
Проверка обычного текста без XML-структуры |
«Содержание запроса» → «Тело запроса» |
|
Проверка формы |
«Содержание запроса» → «Поле формы» |
|
Проверка файла или части multipart-запроса |
«Содержание запроса» → «Multipart» |
XML-условие применяется только к запросам с XML Content-Type.
|
Заголовок Content-Type |
Подходит для XML-условия |
|---|---|
|
|
Да |
|
|
Да |
|
|
Да |
|
|
Да, например |
|
|
Нет |
|
|
Нет. Для этого типа предназначен «Multipart». |
|
|
Нет. Для этого типа предназначено «Поле формы». |
Поля и действия правила
XML-условие доступно при создании и редактировании правила WAF. В области проверки «Содержание запроса» ему соответствует тип тела «XML». После выбора этого типа доступны поля «XPath», «Оператор» и поле значения.
Для XML-условий предусмотрены те же действия правила, что и для других условий.
|
Действие |
Назначение |
|---|---|
|
«Запретить» |
Блокировка XML-запроса по значению узла или атрибута. |
|
«Разрешить» |
Устранение ложного срабатывания для легитимного XML-запроса. |
|
«Отключить правила по ID» |
Отключение конкретных WAF ID, ошибочно сработавших на XML-запрос и указанных в событии атаки. |
Примечание: если XML-запрос одновременно подходит под правила «Разрешить» и «Запретить», приоритет имеет «Разрешить». Поэтому разрешающие правила должны быть максимально точными.
Внимание: в режиме приложения «Мониторинг» правило фиксирует срабатывания, но не блокирует запросы. Для блокировки нужен режим «Активная защита».
XPath
XPath задаёт расположение проверяемого значения в XML-документе. Путь должен быть абсолютным и начинаться с /.
|
Что проверяется |
XPath |
Пример значения |
|---|---|---|
|
Значение узла |
|
|
|
Вложенный узел заказа |
|
|
|
Узлы списка |
|
|
|
Первый элемент списка |
|
|
|
Элемент с атрибутом |
|
|
|
Значение атрибута |
|
|
|
SOAP action внутри тела |
|
|
|
SOAP с префиксами |
|
|
|
Любой узел на одном уровне |
|
|
Выбор XPath по XML-телу
Путь к значению строится от корневого элемента XML-документа к нужному узлу или атрибуту.
|
XML-фрагмент |
Что проверить |
XPath |
|---|---|---|
|
|
ID клиента |
|
|
|
Атрибут заказа |
|
|
|
Имя цифрового товара |
|
|
|
Любой товар с именем Phone |
|
|
|
Только первый товар |
|
|
|
SOAP action |
|
Примечание: если XML содержит префиксы, используйте те же префиксы в XPath. Например, путь для SOAP-запроса с префиксом soap: должен содержать этот префикс.
Некорректные XPath-варианты
Для XML-условий предназначены простые абсолютные пути. Широкие и сложные XPath труднее контролировать: они могут охватить запросы, для которых правило не предназначено.
|
Не используйте |
Причина |
Замена |
|---|---|---|
|
|
Поиск User по всему XML-документу может охватить лишние запросы. |
|
|
|
Функции в XPath не поддерживаются. |
XPath |
|
|
Оси XPath не поддерживаются. |
|
|
|
Отсутствует начальный символ /. |
|
|
|
Слишком много wildcard-сегментов *. |
Точный путь к нужному узлу. |
|
|
Слишком длинное значение внутри предиката атрибута. |
Проверка значения через оператор и поле значения правила. |
Операторы XML-условий
Оператор определяет способ сравнения найденного XML-значения: полное совпадение, поиск фрагмента, проверку по регулярному выражению или наличие узла.
|
Оператор |
Назначение |
Пример |
|---|---|---|
|
«=» |
Полное совпадение значения. |
XPath |
|
«≠» |
Значение не должно совпадать. |
XPath |
|
«Содержит» |
Поиск фрагмента внутри значения. |
XPath |
|
«Не содержит» |
Проверка отсутствия фрагмента в значении. |
XPath |
|
«Регулярное выражение» |
Сравнение значения с шаблоном. |
XPath |
|
«Существует» |
Проверка наличия узла или атрибута. |
XPath |
|
«Не существует» |
Проверка отсутствия узла или атрибута. |
XPath |
Примечание: для операторов «Существует» и «Не существует» поле значения должно оставаться пустым.
Учет регистра
Переключатель «Учитывать регистр» применяется только к сравниваемому значению. Он не меняет XPath и не влияет на имена XML-узлов.
|
XPath |
Значение в правиле |
Значение в запросе |
Если регистр учитывается |
|---|---|---|---|
|
|
|
|
Совпадет. |
|
|
|
|
Не совпадет. |
|
|
|
|
XPath останется |
Ограничения XML-условий
|
Параметр |
Ограничение |
|---|---|
|
XPath |
До 512 символов |
|
Глубина XPath |
До 32 сегментов |
|
Предикаты в XPath |
До 4 предикатов |
|
Значение внутри предиката атрибута |
До 128 символов |
|
Wildcard-сегменты * |
До 2 сегментов |
|
Значение для сравнения |
До 4096 символов |
|
Регулярное выражение |
До 1024 символов |
|
Content-Type |
Только XML-запросы с типами, перечисленными в разделе «Тип тела и Content-Type». |
Примечание: для сложного XML предпочтительны несколько точных правил вместо одного правила с широким XPath: их проще проверить и сопровождать.
Порядок работы
Добавление XML-условия
Примечание: перед сохранением проверьте ограничения XML-условия, особенно при работе со сложным XML-документом или длинным XPath.

