업데이트로 돌아가기
New releaseAug 25, 2026

redact v0.2.2

제로 의존성 Go 라이브러리로, 자격 증명과 유사한 패턴(API 키, JWT, Authorization 헤더, URL userinfo)을 로그/텔레메트리에 도달하기 전에 제거합니다.

공유

redact

자유 형식 문자열에서 자격 증명과 유사한 내용을 제거하여 로그, 텔레메트리, 또는 기타 제3자 표면에 도달하기 전에 차단합니다

Go Reference Pipeline Coverage phpboyscout Go toolkit

phpboyscout Go toolkit의 일부 — 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 가드가 이를 강제합니다.
  • 경계 삭제(redaction). 데이터가 호스트를 떠나는 지점에서 정리하며, 모든 곳에서 정리하지 않습니다.
  • 기본적으로 보수적. 불투명 토큰 폴백은 ≥41자를 요구하므로 UUID, MD5, SHA-1에서 오탐(false positive)이 발생하지 않습니다.

설치

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은 모든 스킴(https://, postgres://, redis://, …)의 URL 사용자 정보, 자격 증명 name=value 할당, "access_token""client_secret"과 같은 JSON 자격 증명 필드, Authorization 헤더 토큰, JWT, 잘 알려진 공급자 접두사(sk-, ghp_, glpat-, AIza, AKIA, Slack) 및 긴 불투명 토큰을 제거합니다. SensitiveHeaderKeys / IsSensitiveHeaderKey는 값을 삭제해야 하는 헤더를 식별합니다.

제한 사항

패턴 카탈로그는 100% 재현율(recall)에 도달할 수 없으며, 이 패키지는 의도적으로 보수적입니다:

  • 구성 불가. 패턴을 추가, 비활성화 또는 재정렬할 수 없습니다 — 패키지는 네 개의 심볼만 내보내며 조정할 것이 없습니다. 대신 이를 중심으로 직접 구성하세요.
  • String은 임의의 헤더 값을 마스킹하지 않습니다. Authorization:만 인식하며 그 외에는 알지 못합니다. X-API-Key: …는 그대로 통과합니다. 헤더 심볼이 바로 그 용도입니다.
  • 맞춤형 및 짧은 비밀은 누락될 수 있습니다. 포괄(catch-all) 폴백은 41자가 필요하며, 각 공급자 접두사에는 엄격한 최소 길이 제한이 있습니다.
  • 패턴은 ASCII 전용이며, 삭제(redaction)는 단방향입니다 — 되돌릴 수 없고 무엇이 대체되었는지 기록도 없습니다.

redact가 하지 않는 일에서 전체 경계를 명시합니다.

문서

전체 가이드, 레퍼런스 및 위협 모델: redact.go.phpboyscout.uk. 생성된 API 문서와 실행 가능한 예제: pkg.go.dev.

라이선스

LICENSE를 참조하세요.

카테고리