
redact v0.2.2
शून्य-निर्भरता वाली Go लाइब्रेरी जो लॉग/टेलीमेट्री तक पहुँचने से पहले क्रेडेंशियल-जैसे पैटर्न (API कुंजियाँ, JWT, Authorization हेडर, URL userinfo) को हटा देती है।
redact
लॉग, टेलीमेट्री या किसी भी तृतीय-पक्ष सतह तक पहुँचने से पहले फ्री-फॉर्म स्ट्रिंग्स से क्रेडेंशियल-जैसी सामग्री हटाएँ
phpboyscout Go टूलकिट का हिस्सा — go-tool-base से निकाले गए छोटे, फ्रेमवर्क-मुक्त Go मॉड्यूल। दस्तावेज़: redact.go.phpboyscout.uk
gitlab.com/phpboyscout/go/redact विश्वसनीय (trusted) और अविश्वसनीय (untrusted) ऑब्ज़र्वेबिलिटी सतहों — टेलीमेट्री वेंडर, लॉग एग्रीगेटर, मेट्रिक स्टोर — के बीच की सीमा (boundary) पर फ्री-फॉर्म स्ट्रिंग्स से क्रेडेंशियल-जैसी सामग्री रिडैक्ट करता है। एरर संदेश, कमांड आर्गुमेंट और HTTP हेडर मान अक्सर गलती से रहस्य (secrets) ले जाते हैं (एम्बेडेड userinfo वाला URL, os.Args में --api-key=sk-… फ़्लैग, किसी एक्सपोर्ट एरर में उद्धृत Authorization हेडर)। बाहर जाते समय उन्हें redact.String से गुज़ारें और वे प्रोसेस से कभी भी सादे (clear) रूप में बाहर नहीं निकलेंगे।
डिज़ाइन
- शून्य निर्भरताएँ। विशुद्ध मानक पुस्तकालय (
regexp,strings) — आपके ग्राफ़ में मॉड्यूल के अलावा कुछ नहीं जाता। एकdepfootprint_test.goगार्ड इसे लागू करता है। - सीमा-रेखा रिडक्शन। डेटा जहाँ होस्ट छोड़ता है वहीं सैनिटाइज़ करें, हर जगह नहीं।
- डिफ़ॉल्ट रूप से रूढ़िवादी। अपारदर्शी-टोकन फ़ॉलबैक को ≥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 userinfo, क्रेडेंशियल name=value असाइनमेंट, "access_token" और "client_secret" जैसे JSON क्रेडेंशियल फ़ील्ड, Authorization-हेडर टोकन, JWT, जाने-माने प्रोवाइडर प्रीफ़िक्स (sk-, ghp_, glpat-, AIza, AKIA, Slack) और लंबे अपारदर्शी टोकन हटाता है। SensitiveHeaderKeys / IsSensitiveHeaderKey उन हेडरों की पहचान करते हैं जिनके मान रिडैक्ट किए जाने चाहिए।
सीमाएँ
पैटर्न कैटलॉग कभी भी 100% रिकॉल तक नहीं पहुँचते, और यह जानबूझकर रूढ़िवादी है:
- कोई कॉन्फ़िगरेशन नहीं। आप कोई पैटर्न जोड़, अक्षम या पुनः क्रमित नहीं कर सकते — पैकेज केवल चार प्रतीक (symbols) निर्यात करता है और ट्यून करने के लिए कुछ नहीं। इसके बजाय इसके चारों ओर रचना (compose) करें।
Stringमनमाने हेडर मानों को मास्क नहीं करता। यह केवलAuthorization:जानता है और कुछ नहीं;X-API-Key: …पास हो जाता है। हेडर प्रतीक इसी के लिए हैं।- विशिष्ट (bespoke) और छोटे रहस्य फिसल जाते हैं। कैच-ऑल फ़ॉलबैक को 41 वर्ण चाहिए, और प्रत्येक प्रोवाइडर प्रीफ़िक्स की एक कठोर न्यूनतम लंबाई होती है।
- पैटर्न केवल ASCII हैं, और रिडक्शन एकतरफा है — उलटने के लिए कुछ नहीं और क्या बदला गया इसका कोई रिकॉर्ड नहीं।
redact क्या नहीं करता पूरी सीमा बताता है।
दस्तावेज़ीकरण
संपूर्ण गाइड, संदर्भ (reference) और खतरा मॉडल: redact.go.phpboyscout.uk। जनरेटेड API दस्तावेज़ और चलाने योग्य उदाहरण: pkg.go.dev।
लाइसेंस
देखें LICENSE।