
redact v0.2.2
# Remova conteúdo semelhante a credenciais de strings de formato livre antes que elas cheguem a logs ou telemetria. Parte do kit de ferramentas Go phpboyscout. · https://redact.go.phpboyscout.uk
redact
Remova conteúdo semelhante a credenciais de strings de formato livre antes que cheguem a logs, telemetria ou qualquer superfície de terceiros
Parte do phpboyscout Go toolkit: módulos Go pequenos e sem framework extraídos do go-tool-base. Documentação: redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact remove conteúdo semelhante a credenciais de strings
de formato livre na fronteira entre superfícies de observabilidade confiáveis e não
confiáveis, como fornecedores de telemetria, agregadores de logs e armazenamentos de métricas.
Mensagens de erro, argumentos de comando e valores de cabeçalhos HTTP carregam rotineiramente
segredos por acidente (uma URL com userinfo incorporado, uma flag --api-key=sk-… em
os.Args, um cabeçalho Authorization citado num erro de exportação). Encaminhe esses
dados por redact.String na saída e eles nunca deixam o processo em texto claro.
Design
- Zero dependências. Biblioteca padrão pura (
regexp,strings), então nada além do módulo entra no seu grafo. Uma proteçãodepfootprint_test.goimpõe isso, e mantém os testes emtestifye nogo/errorsdo estate. - Redação na fronteira. Sanitize onde os dados deixam o host, não em todo lugar.
- Conservador por padrão. O fallback de token opaco exige ≥41 caracteres para nunca dar falso-positivo 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 de URLs 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 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.
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 catch-all precisa de 41 caracteres, e cada prefixo de provedor tem um comprimento mínimo rígido.
- Os padrões são apenas ASCII, e a redação é unidirecional: nada para 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ças: redact.go.phpboyscout.uk. Documentação de API gerada e exemplos executáveis: pkg.go.dev.
Licença
Veja LICENSE.