
redact v0.2.2
Bibliothèque Go sans dépendance qui supprime les motifs de type identifiants (clés API, JWT, en-têtes d'autorisation, userinfo d'URL) avant qu'ils n'atteignent les journaux/télémétrie.
redact
Supprime les contenus ressemblant à des identifiants de chaînes libres avant qu’ils n’atteignent les journaux, la télémétrie ou toute surface tierce
Fait partie de la boîte à outils Go phpboyscout — de petits modules Go sans framework, extraits de go-tool-base. Documentation : redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact masque les contenus ressemblant à des identifiants dans les chaînes libres à la frontière entre les surfaces d’observabilité de confiance et celles qui ne le sont pas —
fournisseurs de télémétrie, agrégateurs de journaux, magasins de métriques. Les messages d’erreur, les
arguments de commande et les valeurs d’en-têtes HTTP transportent couramment des secrets par accident (une URL avec
userinfo intégré, un indicateur --api-key=sk-… dans os.Args, un en-tête Authorization
cité dans une erreur d’exportation). Passez-les par redact.String à la sortie
et ils ne quittent jamais le processus en clair.
Conception
- Zéro dépendance. Uniquement la bibliothèque standard (
regexp,strings) — rien d’autre que le module n’entre dans votre graphe. Un garde-foudepfootprint_test.gole fait respecter. - Masquage à la frontière. Nettoyez là où les données quittent l’hôte, pas partout.
- Prudent par défaut. Le repli sur les jetons opaques exige ≥41 caractères afin de ne jamais produire de faux positifs sur les UUID, MD5 ou SHA-1.
Installation
go get gitlab.com/phpboyscout/go/redact
Utilisation
import "gitlab.com/phpboyscout/go/redact"
safe := redact.String("failed calling https://user:[email protected]?api_key=sk-abc123…")
// → les identifiants dans le userinfo de l’URL, le paramètre de requête api_key et le jeton sk- sont masqués
msg := redact.Error(err) // redact.String appliqué à err.Error() (sans risque si nil)
if redact.IsSensitiveHeaderKey("Authorization") { /* … masquer la valeur de cet en-tête … */ }
redact.String supprime le userinfo des URL pour tout schéma (https://,
postgres://, redis://, …), les affectations d’identifiants name=value, les champs
JSON d’identifiants tels que "access_token" et "client_secret", les jetons d’en-tête Authorization,
les JWT, les préfixes de fournisseurs bien connus (sk-, ghp_, glpat-, AIza, AKIA, Slack),
et les longs jetons opaques. SensitiveHeaderKeys / IsSensitiveHeaderKey identifient
les en-têtes dont les valeurs doivent être masquées.
Limites
Les catalogues de motifs n’atteignent jamais 100 % de rappel, et celui-ci est délibérément prudent :
- Aucune configuration. Vous ne pouvez ni ajouter, ni désactiver, ni réordonner un motif — le paquet exporte quatre symboles et rien à régler. Composez plutôt autour de lui.
Stringne masque pas les valeurs d’en-têtes arbitraires. Il connaîtAuthorization:et rien d’autre ;X-API-Key: …passe au travers. C’est à cela que servent les symboles d’en-têtes.- Les secrets sur mesure et courts passent au travers. Le repli fourre-tout exige 41 caractères, et chaque préfixe de fournisseur a une longueur minimale stricte.
- Les motifs sont ASCII uniquement, et le masquage est à sens unique — rien à inverser et aucun enregistrement de ce qui a été remplacé.
Ce que redact ne fait pas définit la frontière complète.
Documentation
Guides complets, référence et modèle de menace : redact.go.phpboyscout.uk. Documentation API générée et exemples exécutables : pkg.go.dev.
Licence
Voir LICENSE.