Voltar às atualizações
New releaseAug 25, 2026

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.

Compartilhar

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

Go Reference Pipeline Coverage phpboyscout Go toolkit

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 guarda depfootprint_test.go o 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.
  • String não mascara valores de cabeçalho arbitrários. Ele conhece Authorization: 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.

Categorias