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

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

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

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

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

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

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

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

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

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

JSON (JavaScript Object Notation) — текстовый формат для представления структурированных данных. В HTTP-запросах данные в формате JSON передаются в теле запросов POST, PUT или PATCH с заголовком Content-Type: application/json или аналогичным.

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

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

{
  "user": {
    "username": "Ivan",
    "email": ["ivan_1@example.com", "ivan_2@example.com"]
  },
  "settings": {
    "language": "ru",
    "notifications": {
      "email": true,
      "sms": false
    }
  }
}

JSON строится на двух основных конструкциях:

  • Объект — набор пар «ключ: значение» в фигурных скобках {}.

  • Массив — упорядоченный список значений в квадратных скобках [].

Внутри объектов и массивов допустимы различные типы значений (строка, число, булево значение, пустое значение, объект, массив), связанные поля могут группироваться во вложенные объекты, вложенность может достигать нескольких уровней.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • JSON-схема.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • глубина вложенности объектов;

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

  • количество элементов (значений) в массиве;

  • количество символов в значении типа «строка» (string);

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

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

ПримечаниеUserGate WAF поддерживает спецификации JSON Schema Draft 03, Draft 04 и Draft 06.

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

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

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

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

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

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

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

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

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

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