
redact v0.2.2
从自由格式字符串中剥离类似凭据的内容,防止其进入日志或遥测系统。属于 phpboyscout Go 工具包的一部分。· https://redact.go.phpboyscout.uk
redact
在自由格式字符串到达日志、遥测或任何第三方界面之前,剥离其中类似凭据的内容
属于 phpboyscout Go 工具包的一部分:从 go-tool-base 中提取的小型、无框架 Go 模块。文档:redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact 在可信与不可信可观测性界面(例如遥测供应商、日志聚合器和指标存储)之间的边界处,从自由格式字符串中剥离类似凭据的内容。错误消息、命令行参数和 HTTP 头值经常会意外携带机密(带有内嵌用户信息的 URL、os.Args 中的 --api-key=sk-… 标志、导出错误中引用的 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 会剥离任何 scheme(https://、postgres://、redis:// 等)的 URL 用户信息、凭据 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。