Volver a actualizaciones
Nuevo releaseAug 25, 2026

redact v0.2.2

Librería Go sin dependencias que elimina patrones similares a credenciales (claves de API, JWT, cabeceras Authorization, userinfo de URL) antes de que lleguen a los logs/telemetría.

Compartir

redact

Elimina contenido similar a credenciales de cadenas de formato libre antes de que lleguen a registros, telemetría o cualquier superficie de terceros

Go Reference Pipeline Coverage phpboyscout Go toolkit

Parte del toolkit Go de phpboyscout — módulos Go pequeños y sin frameworks extraídos de go-tool-base. Documentación: redact.go.phpboyscout.uk


gitlab.com/phpboyscout/go/redact enmascara contenido similar a credenciales en cadenas de formato libre en la frontera entre las superficies de observabilidad de confianza y las que no lo son: proveedores de telemetría, agregadores de registros, almacenes de métricas. Los mensajes de error, los argumentos de comandos y los valores de cabeceras HTTP suelen transportar secretos por accidente (una URL con userinfo incrustado, un flag --api-key=sk-… en os.Args, una cabecera Authorization citada en un error de exportación). Si los haces pasar por redact.String a la salida, nunca saldrán del proceso en claro.

Diseño

  • Cero dependencias. Solo biblioteca estándar (regexp, strings): nada más que el módulo entra en tu grafo. Un guardián depfootprint_test.go lo garantiza.
  • Enmascarado en la frontera. Enmascara donde los datos salen del host, no en todas partes.
  • Conservador por defecto. El respaldo de token opaco requiere ≥41 caracteres, por lo que nunca genera falsos positivos con UUIDs, MD5 o SHA-1.

Instalación

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 elimina el userinfo de las URLs para cualquier esquema (https://, postgres://, redis://, …), las asignaciones de credenciales name=value, los campos JSON de credenciales como "access_token" y "client_secret", los tokens de cabecera Authorization, los JWT, los prefijos de proveedores conocidos (sk-, ghp_, glpat-, AIza, AKIA, Slack) y los tokens opacos largos. SensitiveHeaderKeys / IsSensitiveHeaderKey identifican las cabeceras cuyos valores deben enmascararse.

Limitaciones

Los catálogos de patrones nunca alcanzan una exhaustividad del 100 %, y este es deliberadamente conservador:

  • Sin configuración. No puedes añadir, deshabilitar ni reordenar un patrón: el paquete exporta cuatro símbolos y nada que ajustar. Compón tu propia lógica alrededor de él.
  • String no enmascara valores de cabecera arbitrarios. Solo conoce Authorization: y nada más; X-API-Key: … pasa de largo. Para eso están los símbolos de cabecera.
  • Los secretos personalizados y cortos se cuelan. El respaldo general necesita 41 caracteres y cada prefijo de proveedor tiene una longitud mínima estricta.
  • Los patrones son solo ASCII y el enmascarado es unidireccional: no hay nada que revertir ni registro de lo que se reemplazó.

Lo que redact no hace establece el límite completo.

Documentación

Guías completas, referencia y modelo de amenazas: redact.go.phpboyscout.uk. Documentación de API generada y ejemplos ejecutables: pkg.go.dev.

Licencia

Consulta LICENSE.

Categorías