Retour aux mises à jour
New releaseAug 25, 2026

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.

Partager

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

Go Reference Pipeline Coverage phpboyscout Go toolkit

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-fou depfootprint_test.go le 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.
  • String ne masque pas les valeurs d’en-têtes arbitraires. Il connaît Authorization: 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.

Catégories