Перезапись тела

Chute может искать и заменять содержимое в телах HTTP-запросов и ответов, используя регулярные выражения или выражения JSONPath. Для HTTPS-трафика требуется расшифровка MitM.

Правила перезаписи тела определяются в разделе [Body Rewrite]. К одному запросу может быть применено несколько правил.

[Body Rewrite]
^https://api\.example\.com/response response regex "old-text" "new-text"
^https://api\.example\.com/request request regex "sensitive" "[redacted]"
^https://api\.example\.com/data jsonpath-response jsonpath $.ads null

Формат правила

Каждое правило следует этому общему формату:

<URL regex> [direction] <mode> <pattern> <replacement>

Направление

Ключевое слово Описание
response Применить к телу ответа (по умолчанию, если не указано)
request Применить к телу запроса

Режимы

Режим Описание
regex Поиск и замена с использованием регулярного выражения
jsonpath-response / jsonpath-request / body-jsonpath-response / body-jsonpath-request Модификация на основе JSONPath

Режим Regex

Выполняет стандартный поиск и замену с использованием регулярного выражения в декодированном тексте тела. Использует NSRegularExpression (ICU) с сопоставлением без учета регистра. Замена поддерживает ссылки на группы захвата ($1, $2 и т.д.).

<URL regex> [response|request] regex <pattern> <replacement>

Пример — удаление рекламы из JSON-ответа:

[Body Rewrite]
^https://api\.example\.com/feed response regex "\"ads\":\s*\[.*?\]" "\"ads\":[]"

Пример — очистка тела запроса:

[Body Rewrite]
^https://api\.example\.com/submit request regex "\"password\":\s*\".*?\"" "\"password\":\"[FILTERED]\""

Пример — использование групп захвата для переформатирования данных:

[Body Rewrite]
// Замена "last, first" на "first last"
^https://api\.example\.com/users response regex "\"name\":\s*\"(\\w+),\\s*(\\w+)\"" "\"name\":\"$2 $1\""

Пример — перезапись встроенных URL в теле ответа:

[Body Rewrite]
^https://api\.example\.com response regex "https://old-cdn\\.example\\.com" "https://new-cdn.example.com"

Токены, содержащие пробелы, должны быть заключены в двойные кавычки:

[Body Rewrite]
^https://example\.com response regex "old value with spaces" "new value"

Чтобы включить буквальную двойную кавычку внутри заключенного в кавычки токена, экранируйте ее обратной косой чертой: \".


Режим JSONPath

Модифицирует тела JSON с использованием выражений JSONPath. Поддерживает чтение, установку и удаление значений по указанным путям.

<URL regex> jsonpath-response|jsonpath-request jsonpath <jsonpath-expression> [value]

Поддерживаемый синтаксис JSONPath

Выражение Описание
$.key Доступ к свойству объекта
$.key.subkey Доступ к вложенным свойствам
$[0] Доступ к элементу массива по индексу
$.key[0].subkey Смешанный доступ к объекту и массиву
$.items[*].name Подстановочный знак: все элементы в массиве
$.*.value Подстановочный знак: все свойства

Типы значений

Значение Результат
"string" Установить строковое значение
42 Установить целое число
3.14 Установить число с плавающей точкой
true Установить булево значение true
false Установить булево значение false
null или опущено Удалить путь

Пример — установка поля JSON:

[Body Rewrite]
^https://api\.example\.com/profile jsonpath-response jsonpath $.user.name "Anonymous"

Пример — удаление поля JSON:

[Body Rewrite]
^https://api\.example\.com/data jsonpath-response jsonpath $.tracking null

Пример — модификация с подстановочным знаком:

[Body Rewrite]
^https://api\.example\.com/list jsonpath-response jsonpath $.items[*].hidden true

Практические примеры

Удаление параметров отслеживания из JSON-ответов

Удаление полей trackingId и sessionId из всех API-ответов:

[Body Rewrite]
^https://api\.example\.com/ jsonpath-response jsonpath $.trackingId null
^https://api\.example\.com/ jsonpath-response jsonpath $.sessionId null

Внедрение тега script в HTML-ответы

Добавление пользовательского тега <script> перед </body> на всех HTML-страницах:

[Body Rewrite]
^https://www\.example\.com/ response regex "</body>" "<script>console.log('injected')</script></body>"

Скрытие конфиденциальных полей в журналах запросов

Замена ключей API и токенов в исходящих телах запросов до их достижения сервера:

[Body Rewrite]
^https://api\.example\.com/ request regex "\"apiKey\":\s*\"[^\"]+\"" "\"apiKey\":\"[REDACTED]\""
^https://api\.example\.com/ request regex "\"token\":\s*\"[^\"]+\"" "\"token\":\"[REDACTED]\""

Нормализация форматов дат в ответах

Замена дат ISO на более короткий формат:

[Body Rewrite]
^https://api\.example\.com/ response regex "(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z" "$1/$2/$3 $4:$5"

Отключение флагов функций в конфигурации приложения

Принудительная установка всех флагов функций в false в конечной точке конфигурации:

[Body Rewrite]
^https://api\.example\.com/config jsonpath-response jsonpath $.features[*].enabled false

Перезапись URL CDN в кэшированных ответах

Замена всех ссылок на старый CDN новым:

[Body Rewrite]
^https://www\.example\.com/ response regex "https://old-cdn\.example\.com" "https://new-cdn.example.com"

Конвейер обработки

Перезапись тела автоматически обрабатывает:

  1. Content-Encoding: Поддерживает gzip и deflate. Пропускает неподдерживаемые кодировки.
  2. Transfer-Encoding: Дечанкует chunked transfer encoding перед обработкой.
  3. Декодирование: Распаковывает тела перед применением правил перезаписи.
  4. Перекодирование: Пересжимает тела и обновляет Content-Length. Удаляет заголовок Transfer-Encoding.

Максимальный размер тела для обработки перезаписи составляет 128 КБ по умолчанию. Тела больше этого размера проходят без модификации.


Примечания

  • Для HTTPS-трафика должна быть включена расшифровка MitM для соответствующего имени хоста.
  • Сопоставление регулярных выражений нечувствительно к регистру. Шаблон замены поддерживает ссылки на группы захвата ICU: $0 (полное совпадение), $1 (первая группа), $2 (вторая группа) и т.д.
  • Режим JSONPath применяется только если тело является допустимым JSON.
  • Правила перезаписи тела применяются к декодированному (UTF-8) тексту тела.
  • Несколько правил могут совпадать и применяться к одному запросу/ответу (они применяются в порядке их определения).
  • Когда правило устанавливает или удаляет значение через JSONPath, которое не существует, тело остается неизменным.
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-06-28 02:09:17

results matching ""

    No results matching ""