
redact v0.2.2
依存関係ゼロのGoライブラリで、APIキー、JWT、Authorizationヘッダー、URL userinfoなどの認証情報に似たパターンを、ログ/テレメトリに到達する前に除去します。
redact
ログ、テレメトリ、その他いかなる第三者向け出力先に到達する前に、自由形式の文字列から認証情報らしき内容を除去します
phpboyscout Go toolkit の一部 — go-tool-base から抽出された、小さなフレームワーク非依存のGoモジュール集です。ドキュメント: redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact は、信頼済みと非信頼の可観測性サーフェス — テレメトリベンダー、ログ集約サービス、メトリクスストア — の境界で、自由形式文字列から認証情報らしき内容を除去します。エラーメッセージ、コマンド引数、HTTPヘッダー値には、偶然にもシークレットが含まれることがよくあります(ユーザー情報が埋め込まれたURL、os.Args 内の --api-key=sk-… フラグ、エクスポートエラーに引用された Authorization ヘッダーなど)。これらを出力時に redact.String に通せば、平文のままプロセス外に出ることは決してありません。
Design
- ゼロ依存。 純粋な標準ライブラリ(
regexp、strings)のみ — モジュール以外は依存グラフに入りません。depfootprint_test.goによるガードがそれを強制します。 - 境界での秘匿化。 データがホストを離れる箇所のみをサニタイズし、すべての場所で行うわけではありません。
- デフォルトで保守的。 不透明トークンのフォールバックには41文字以上が必要なため、UUID、MD5、SHA-1 に対して誤検知することはありません。
Install
go get gitlab.com/phpboyscout/go/redact
Usage
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 は、任意のスキーム(https://、postgres://、redis://、…)のURLユーザー情報、認証情報の name=value 代入、"access_token" や "client_secret" などのJSON認証情報フィールド、Authorization ヘッダーのトークン、JWT、既知のプロバイダプレフィックス(sk-、ghp_、glpat-、AIza、AKIA、Slack)、そして長い不透明トークンを除去します。SensitiveHeaderKeys / IsSensitiveHeaderKey は、値を秘匿化すべきヘッダーを識別します。
Limitations
パターンカタログは100%の再現率には決して到達せず、このパッケージは意図的に保守的です:
- 設定なし。 パターンの追加・無効化・並べ替えはできません。このパッケージが公開しているのは4つのシンボルだけで、調整項目はありません。代わりに、このパッケージを中心に独自に構成してください。
Stringは任意のヘッダー値をマスクしません。Authorization:のみを認識し、それ以外は認識しません。X-API-Key: …は素通しです。そのためのヘッダー用シンボルが用意されています。- 独自形式のシークレットや短いシークレットはすり抜けます。 包括的フォールバックには41文字が必要で、各プロバイダプレフィックスには厳格な最小長があります。
- パターンはASCIIのみ対応で、秘匿化は一方向です。元に戻す手段も、置き換えられた内容の記録もありません。
完全な境界は、redact が行わないこと に説明されています。
Documentation
完全なガイド、リファレンス、脅威モデル: redact.go.phpboyscout.uk。 生成されたAPIドキュメントと実行可能な例: pkg.go.dev。
License
LICENSE を参照してください。