
redact v0.2.2
Zero-Dependency-Go-Bibliothek, die zugangsdatenähnliche Muster (API-Schlüssel, JWTs, Authorization-Header, URL-Userinfo) entfernt, bevor sie Logs/Telemetrie erreichen.
redact
Entferne zugangsdatenähnliche Inhalte aus Freitext-Strings, bevor sie Logs, Telemetrie oder eine beliebige Drittanbieter-Oberfläche erreichen
Teil des phpboyscout Go toolkit — kleine, framework-freie Go-Module, extrahiert aus go-tool-base. Dokumentation: redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact schwärzt zugangsdatenähnliche Inhalte aus Freitext-Strings an der Grenze zwischen vertrauenswürdigen und nicht vertrauenswürdigen Observability-Oberflächen — Telemetrie-Anbietern, Log-Aggregatoren, Metrikspeichern. Fehlermeldungen, Befehlsargumente und HTTP-Header-Werte tragen regelmäßig versehentlich Geheimnisse mit sich (eine URL mit eingebettetem Userinfo, ein --api-key=sk-…-Flag in os.Args, ein in einem Exportfehler zitierter Authorization-Header). Leiten Sie diese auf dem Weg nach außen durch redact.String, und sie verlassen den Prozess nie im Klartext.
Design
- Keine Abhängigkeiten. Reine Standardbibliothek (
regexp,strings) — nichts außer dem Modul gelangt in Ihren Graphen. Eindepfootprint_test.go-Guard erzwingt das. - Schwärzung an der Grenze. Bereinigen Sie dort, wo Daten den Host verlassen, nicht überall.
- Standardmäßig konservativ. Die Fallback-Regel für opake Token erfordert ≥41 Zeichen, sodass sie bei UUIDs, MD5 oder SHA-1 nie falsch-positive Ergebnisse liefert.
Installation
go get gitlab.com/phpboyscout/go/redact
Verwendung
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 maskiert URL-Userinfo für jedes Schema (https://, postgres://, redis://, …), name=value-Zuweisungen von Zugangsdaten, JSON-Zugangsdatenfelder wie "access_token" und "client_secret", Authorization-Header-Token, JWTs, bekannte Provider-Präfixe (sk-, ghp_, glpat-, AIza, AKIA, Slack) und lange opake Token. SensitiveHeaderKeys / IsSensitiveHeaderKey identifizieren Header, deren Werte geschwärzt werden sollten.
Einschränkungen
Musterkataloge erreichen nie 100 % Trefferquote, und dieser ist bewusst konservativ gehalten:
- Keine Konfiguration. Sie können kein Muster hinzufügen, deaktivieren oder neu anordnen — das Paket exportiert vier Symbole und nichts zum Einstellen. Bauen Sie stattdessen eigene Lösungen darum herum.
Stringmaskiert keine beliebigen Header-Werte. Bekannt ist nurAuthorization:und sonst nichts;X-API-Key: …geht durch. Genau dafür sind die Header-Symbole da.- Individuelle und kurze Geheimnisse schlüpfen durch. Der Allesfänger-Fallback benötigt 41 Zeichen, und jedes Provider-Präfix hat eine feste Mindestlänge.
- Muster sind rein auf ASCII beschränkt, und die Schwärzung ist eine Einbahnstraße — nichts kann rückgängig gemacht werden, und es gibt keine Aufzeichnung darüber, was ersetzt wurde.
Was redact nicht tut beschreibt die vollständige Grenze.
Dokumentation
Ausführliche Anleitungen, Referenz und Bedrohungsmodell: redact.go.phpboyscout.uk. Generierte API-Dokumentation und ausführbare Beispiele: pkg.go.dev.
Lizenz
Siehe LICENSE.