
redact v0.2.2
Biblioteca Go sem dependências que remove padrões semelhantes a credenciais (chaves de API, JWTs, cabeçalhos Authorization, userinfo de URL) antes que cheguem a logs/telemetria.
redact
Remova conteúdo semelhante a credenciais de strings de formato livre antes que elas cheguem a logs, telemetria ou qualquer superfície de terceiros
Parte do phpboyscout Go toolkit — módulos Go pequenos e sem framework, extraídos de go-tool-base. Documentação: redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact redige conteúdo semelhante a credenciais de strings de formato livre
na fronteira entre superfícies de observabilidade confiáveis e não confiáveis —
fornecedores de telemetria, agregadores de logs, armazenamentos de métricas. Mensagens de erro, argumentos
de comando e valores de cabeçalhos HTTP transportam segredos por acidente com frequência (uma URL com
userinfo embutido, uma flag --api-key=sk-… em os.Args, um cabeçalho Authorization
citado em um erro de exportação). Direcione-os por redact.String na saída
e eles nunca deixarão o processo em texto puro.
Design
- Zero dependências. Biblioteca padrão pura (
regexp,strings) — nada além do módulo entra no seu grafo. Um teste de guardadepfootprint_test.goo garante. - Redação na fronteira. Sanitize onde os dados saem do host, não em todos os lugares.
- Conservador por padrão. O fallback de token opaco exige ≥41 caracteres para nunca gerar falsos positivos em UUIDs, MD5 ou SHA-1.
Instalação
go get gitlab.com/phpboyscout/go/redact
Uso
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 remove o userinfo da URL para qualquer esquema (https://, postgres://,
redis://, …), atribuições de credenciais name=value, campos de credenciais JSON como
"access_token" e "client_secret", tokens de cabeçalho Authorization, JWTs,
prefixos de provedores bem conhecidos (sk-, ghp_, glpat-, AIza, AKIA, Slack)
e tokens opacos longos. SensitiveHeaderKeys / IsSensitiveHeaderKey identificam
cabeçalhos cujos valores devem ser redigidos.
Limitações
Catálogos de padrões nunca alcançam 100% de recall, e este é deliberadamente conservador:
- Sem configuração. Você não pode adicionar, desabilitar ou reordenar um padrão — o pacote exporta quatro símbolos e nada para ajustar. Componha em torno dele em vez disso.
Stringnão mascara valores de cabeçalho arbitrários. Ele conheceAuthorization:e nada mais;X-API-Key: …passa direto. É para isso que servem os símbolos de cabeçalho.- Segredos personalizados e curtos escapam. O fallback abrangente precisa de 41 caracteres, e cada prefixo de provedor tem um comprimento mínimo rígido.
- Padrões são somente ASCII, e a redação é unidirecional — nada a reverter e nenhum registro do que foi substituído.
O que o redact não faz declara a fronteira completa.
Documentação
Guias completos, referência e modelo de ameaça: redact.go.phpboyscout.uk. Documentação de API gerada e exemplos executáveis: pkg.go.dev.
Licença
Veja LICENSE.