Глобальный поиск

Поиск по URL, заголовкам, телам и трафику с учётными данными во всех захватах.

Глобальный поиск выполняется по всем захватам, включённым в API-лаборатории, и за один проход сопоставляет ваши запросы со строкой запроса, заголовками и декодированными телами каждого обмена. Это самый быстрый способ найти конкретный вызов, утечку значения или все запросы с учётными данными перед тем, как переходить к replay или расследованию.

Открытие глобального поиска

  1. Откройте представление API lab (см. /docs/ru/api-re/).
  2. Выберите вкладку Search (вторая вкладка после Catalog).
  3. Введите запрос в поле поиска — placeholder: Search URL, headers, decoded bodies, status….

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

Что индексируется

Каждый обмен сканируется по шести полям. При совпадении сообщается, какие поля совпали:

Метка поляЧто ищется
urlМетод, authority (хост), путь, строка запроса и полный URL
statusЧисловой код состояния и текст состояния (например, 404 Not Found)
request headersВсе строки заголовков запроса в порядке захвата
request bodyТекст декодированного тела запроса
response headersВсе строки заголовков ответа
response bodyТекст декодированного тела ответа

Поля тел содержат декодированный текст, полученный конвейером декодирования захвата, поэтому поиск проникает внутрь JSON, form и других текстовых payloads. Обмены, чьи тела не были декодированы как текст, доступны для поиска только через остальные поля.

Синтаксис запроса

Запрос — это обычные термины, а не регулярное выражение:

  • Разбивается по пробелам на токены. Пустой запрос сам по себе ничего не находит — комбинируйте его с фильтрами, чтобы перечислить обмены по атрибуту (см. ниже).
  • AND между токенами: каждый токен должен встречаться где-нибудь в одном и том же обмене. Термины могут попадать в разные поля — orders 500 находит обмен, URL которого содержит orders, а статус равен 500.
  • OR между полями: токен совпадает, если встречается в любом из шести индексируемых полей. Чипы на каждом результате отмечают поля, в которых все термины встречаются одновременно в пределах одного поля.
  • Совпадение нечувствительно к регистру.
  • И запрос, и индексируемый текст нормализуются одинаково, поэтому пунктуация и URL-кодирование не обязаны совпадать в точности. Нормализация отбрасывает схемы http:///https://, трактует последовательности % / ? # & = : . \ _ - как разделители (или удаляет их), переписывает %2f в / и %3a в :, а по возможности выполняет percent-декодирование значений.

Благодаря этой нормализации все перечисленные запросы находят https://api.example.com/v1/users:

api.example.com
api example com
api/v1/users
APIEXAMPLECOM

Фильтрация результатов

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

Элемент управленияЗначенияПоведение
MethodGET, POST, PUT, PATCH, DELETE, OPTIONSТочное совпадение метода (без учёта регистра)
Status2xx, 3xx, 4xx, 5xxСовпадение по классу статуса; обмены без записанного статуса исключаются
Host contains…Произвольный текстПоиск подстроки в authority (хосте) без учёта регистра
Credential trafficЧекбоксОставляет только обмены, ссылающиеся на секреты (следующий раздел)

Библиотека поиска также принимает фильтр по подстроке contentType, но панель не предоставляет для него элемента управления.

При пустом запросе список результатов определяют только фильтры: например, Status = 5xx без терминов выводит все обмены с ошибками сервера по всем включённым захватам. Строка сводки под панелью инструментов сообщает {n} results across {m} exchanges.

Поиск трафика с учётными данными

Отметьте Credential traffic, чтобы ограничить результаты обменами, несущими секреты. Обмен подходит, если выполняется любое из условий:

  • Имя заголовка запроса совпадает с authorization, cookie, token, secret, api-key или api_key (без учёта регистра).
  • Имя параметра запроса оканчивается на token, secret, key или sig, либо в точности равно code — например, ?access_token=…, ?sig=…, ?code=….

Комбинируйте чекбокс с терминами, чтобы сузить область поиска: например, запрос refresh при включённом Credential traffic найдёт все вызовы обновления токена.

[!WARNING] Поиск учётных данных предназначен для авторизованного тестирования систем, которыми вы владеете или которые contracted тестировать. Совпадения показывают, где проходят живые секреты; обращайтесь с ними согласно правилам обработки данных вашего engagement. Конфиденциальные значения по умолчанию маскируются в представлениях анализа — см. /docs/ru/security/.

Переход от совпадения к запросу

Каждая строка результата показывает:

  • Бейдж метода и authority + path (на запросах upgrade появляется бейдж WebSocket).
  • Имя захвата (сессии), из которого пришло совпадение.
  • Чипы совпавших полей (url, status, request headers, request body, response headers, response body).
  • Content type ответа и цветовой бейдж статуса.

Щёлкните по строке, чтобы открыть именно этот запрос в рабочей области. Список результатов прокручивается независимо от панели фильтров, поэтому можно уточнять термины, не теряя места.

Поведение на больших захватах

Поиск выполняется целиком во фронтенде по списку обменов в памяти — на каждое нажатие клавиши не приходится серверный round-trip запроса.

  • Лимит совпадений: результаты останавливаются на 500 обменах. При достижении лимита появляется бейдж first 500 shown; сузьте запрос или добавьте фильтры, чтобы добраться до более глубоких совпадений.
  • Отзывчивый ввод: ввод запроса и хоста отложен (useDeferredValue), поэтому UI остаётся отзывчивым, пока пересчитывается большой набор результатов, а результаты мемоизируются между нажатиями клавиш.
  • Линейное сканирование: каждый включённый обмен проверяется по порядку, поэтому стоимость растёт пропорционально общему числу обменов по включённым захватам. На очень больших импортах используйте фильтры по методу, статусу и хосту, чтобы сократить рабочий набор, прежде чем вводить широкие термины.

[!TIP] Если термин должен быть в теле, но совпадений нет, проверьте, что тело декодировалось как текст: непрозрачные или бинарные тела заменяются placeholder’ом и недоступны для поиска.

Документация Traffic Jam. Собрано с помощью Hugo.