
redact v0.2.2
Библиотека Go с нулевыми зависимостями, которая вырезает шаблоны, похожие на учётные данные (API-ключи, JWT, заголовки Authorization, userinfo в URL), прежде чем они попадут в логи/телеметрию.
redact
Удаляет похожий на учётные данные контент из строк произвольной формы до того, как он попадёт в журналы, телеметрию или на любую стороннюю поверхность
Часть набора инструментов 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.