
redact v0.2.2
제로 의존성 Go 라이브러리로, 자격 증명과 유사한 패턴(API 키, JWT, Authorization 헤더, URL userinfo)을 로그/텔레메트리에 도달하기 전에 제거합니다.
redact
자유 형식 문자열에서 자격 증명과 유사한 내용을 제거하여 로그, 텔레메트리, 또는 기타 제3자 표면에 도달하기 전에 차단합니다
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를 참조하세요.