
redact v0.2.2
Удаляет из строк произвольного формата содержимое, похожее на учётные данные, до того, как они попадут в журналы или телеметрию. Часть набора инструментов phpboyscout на Go. · https://redact.go.phpboyscout.uk
redact
Удаляет содержимое, похожее на учётные данные, из строк произвольной формы до того, как они попадут в логи, телеметрию или любую стороннюю систему
Часть phpboyscout Go toolkit: небольшие Go-модули без привязки к фреймворкам, выделенные из go-tool-base. Документация: redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact удаляет содержимое, похожее на учётные данные, из строк
произвольной формы на границе между доверенными и недоверенными поверхностями
наблюдаемости, такими как поставщики телеметрии, агрегаторы логов и хранилища метрик.
Сообщения об ошибках, аргументы команд и значения HTTP-заголовков регулярно
случайно содержат секреты (URL со встроенными данными пользователя, флаг
--api-key=sk-… в os.Args, заголовок Authorization, процитированный в ошибке
экспорта). Пропустите их через redact.String на выходе — и они никогда не покинут
процесс в открытом виде.
Дизайн
- Ноль зависимостей. Только стандартная библиотека (
regexp,strings), так что в ваш граф зависимостей попадает лишь сам модуль. Это обеспечивается защитойdepfootprint_test.go, которая ограничивает тестыtestifyи внутреннимgo/errors. - Редактирование на границе. Очищайте там, где данные покидают хост, а не везде.
- Консервативность по умолчанию. Резервный вариант для непрозрачных токенов требует ≥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 удаляет данные пользователя из 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.