Назад к обновлениям
New releaseAug 25, 2026

redact v0.2.2

Библиотека Go с нулевыми зависимостями, которая вырезает шаблоны, похожие на учётные данные (API-ключи, JWT, заголовки Authorization, userinfo в URL), прежде чем они попадут в логи/телеметрию.

Поделиться

redact

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

Go Reference Pipeline Coverage phpboyscout Go toolkit

Часть набора инструментов phpboyscout Go — небольшие Go-модули без фреймворков, извлечённые из go-tool-base. Документация: redact.go.phpboyscout.uk


gitlab.com/phpboyscout/go/redact редактирует похожий на учётные данные контент из строк произвольной формы на границе между доверенными и недоверенными поверхностями наблюдаемости — вендорами телеметрии, агрегаторами журналов, хранилищами метрик. Сообщения об ошибках, аргументы команд и значения HTTP-заголовков регулярно случайно содержат секреты (URL со встроенным userinfo, флаг --api-key=sk-… в os.Args, заголовок Authorization, процитированный в ошибке экспорта). Пропустите их через redact.String на выходе — и они никогда не покинут процесс в открытом виде.

Дизайн

  • Ноль зависимостей. Только стандартная библиотека (regexp, strings) — в ваш граф попадает лишь сам модуль. Проверка depfootprint_test.go гарантирует это.
  • Редактирование на границе. Очищайте данные там, где они покидают хост, а не повсюду.
  • Консервативно по умолчанию. Резервное правило для непрозрачных токенов требует ≥41 символа, поэтому оно никогда не даёт ложных срабатываний на UUID, MD5 или SHA-1.

Установка

go get gitlab.com/phpboyscout/go/redact

Использование

import "gitlab.com/phpboyscout/go/redact"

safe := redact.String("failed calling https://user:[email protected]?api_key=sk-abc123…")
// → credentials in the URL userinfo, the api_key query param, and the sk- token are masked

msg := redact.Error(err) // redact.String applied to err.Error() (nil-safe)

if redact.IsSensitiveHeaderKey("Authorization") { /* … redact this header's value … */ }

redact.String удаляет userinfo из URL для любой схемы (https://, postgres://, redis://, …), присваивания учётных данных вида name=value, JSON-поля с учётными данными, такие как "access_token" и "client_secret", токены заголовка Authorization, JWT, известные префиксы провайдеров (sk-, ghp_, glpat-, AIza, AKIA, Slack) и длинные непрозрачные токены. SensitiveHeaderKeys / IsSensitiveHeaderKey определяют заголовки, значения которых следует редактировать.

Ограничения

Каталоги паттернов никогда не достигают полноты 100%, и этот намеренно консервативен:

  • Без конфигурации. Нельзя добавить, отключить или изменить порядок паттернов — пакет экспортирует четыре идентификатора, и настраивать нечего. Вместо этого компонуйте вокруг него.
  • String не маскирует произвольные значения заголовков. Он знает Authorization: и ничего больше; X-API-Key: … проходит без изменений. Именно для этого существуют идентификаторы заголовков.
  • Нестандартные и короткие секреты проскальзывают. Резервное правило «поймать всё» требует 41 символ, а у каждого префикса провайдера есть жёсткая минимальная длина.
  • Паттерны поддерживают только ASCII, а редактирование одностороннее — ничего нельзя обратить и нет записи о том, что было заменено.

Чего redact не делает описывает полную границу.

Документация

Полные руководства, справочник и модель угроз: redact.go.phpboyscout.uk. Сгенерированная документация API и исполняемые примеры: pkg.go.dev.

Лицензия

См. LICENSE.

Категории