
स्कैन करें। रिडैक्ट करें। साफ कमिट करें।
सीक्रेट खोजें। ठीक करें। साफ़ कमिट करें।
सीक्रेट स्कैनर अलार्म बजाने में तो माहिर होते हैं, लेकिन उसे बुझाने में ज़्यादा मदद नहीं करते। वे आपको लीक हुए क्रेडेंशियल्स की एक सूची थमा देते हैं और सफ़ाई का काम आप पर छोड़ देते हैं। Credactor इस चक्र को पूरा करता है: यह हार्डकोडेड सीक्रेट ढूँढता है और उसे मौके पर ही फिर से लिख देता है, ताकि एक लीक पहचान से लेकर ठीक होने तक एक ही कमांड में पूरा हो जाए।
क्रेडेंशियल्स को सोर्स कोड से बाहर रखना एक बुनियादी सुरक्षा अभ्यास है, वैकल्पिक नहीं। Credactor इस बुनियादी नियम को निभाना आसान बनाता है — कमिट से पहले आपकी मशीन पर या मर्ज से पहले CI में। इसे अकेले चलाएँ, या उन स्कैनरों के साथ जिन पर आप पहले से भरोसा करते हैं।
# Credactor finds this:
db_password = "h8Tq2vKp9mRz4Wd"
# By default it rewrites the secret as a sentinel that fails loudly at runtime:
db_password = "REDACTED_BY_CREDACTOR"
# With --replace-with env, it writes a reference that reads from the environment:
db_password = os.environ["DB_PASSWORD"]
रिडैक्शन आपके वर्किंग ट्री में फ़ाइलों को फिर से लिखता है। अगर कोई सीक्रेट पहले ही कमिट हो चुका है, तो कुंजी रोटेट करें और इतिहास को भी साफ़ करें (उदाहरण के लिए,
git filter-repoकी मदद से)। किसी फ़ाइल को फिर से लिखना लीक हुए क्रेडेंशियल को रद्द करने का विकल्प नहीं है।
REDACTED_BY_CREDACTOR सेंटिनल जो रनटाइम पर फेल होता है, या भाषा-जागरूक एनवायरनमेंट-वेरिएबल रेफ़रेंस (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP, और shell) जैसे os.environ["KEY"]। यह रिप्लेसमेंट मान्य कोड होता है। अगर फ़ाइल में पहले से मेल खाता इम्पोर्ट (जैसे import os) शामिल नहीं है, तो उसे जोड़ें।.bak बैकअप, सिमलिंक-सीमा और फ़ाइल-अनुमति गार्ड, और हर आउटपुट में पूर्ण-सीक्रेट मास्किंग। अगर सुरक्षित बैकअप नहीं लिखा जा सकता, तो Credactor फ़ाइल को अंधाधुंध फिर से लिखने के बजाय छोड़ देता है, और राइट के दौरान क्रैश होने पर मूल फ़ाइल सुरक्षित रहती है।--ci गेट, एक pre-commit हुक, और Gitleaks, TruffleHog या Betterleaks रिपोर्ट्स का इनजेशन। जिस स्कैनर को आप पहले से चलाते हैं उससे पहचानें, Credactor से सुधारें।pip install credactor
Python 3.11+ चाहिए। कोई अन्य निर्भरता नहीं। Linux, macOS, और Windows पर चलता है (CI-परीक्षित Linux और Windows पर)।
macOS और Linux पर आप इसे Homebrew से भी इंस्टॉल कर सकते हैं:
brew install rxb06/tap/credactor
यह फ़ॉर्मूला अपने अलग virtualenv में इंस्टॉल होता है और इसमें वैकल्पिक
[encoding] एक्स्ट्रा शामिल है, इसलिए Homebrew इंस्टॉल गैर-UTF-8
फ़ाइलों में भी सीक्रेट का पता लगाता है। सादा pip install credactor उस एक्स्ट्रा को छोड़ देता है; अगर आपको वही कवरेज चाहिए तो pip install 'credactor[encoding]' से जोड़ें।
सोर्स से:
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
इसके बाद credactor किसी भी डायरेक्टरी से काम करता है।
पहले
--dry-runचलाएँ और रिडैक्ट करने से पहले निष्कर्षों की समीक्षा करें। गलत पॉज़िटिव संभव हैं, और--fix-allके तहत एक गलत पॉज़िटिव फिर से लिख दिया जाता है। ज्ञात-सुरक्षित मानों को# credactor:ignoreया.credactorignoreप्रविष्टि से दबाएँ।
credactor --dry-run . # scan, change nothing
credactor . # scan, then redact interactively (y/n per finding)
credactor --fix-all . # redact everything after one confirmation
credactor --fix-all --yes . # redact non-interactively (CI / scripts)
credactor --ci . # read-only gate: exit 1 on findings
credactor --replace-with env . # redact to env-var references instead of the sentinel
यह हुक केवल स्टेज किए गए कंटेंट को गेट करता है, इसलिए पहले से कमिट किया गया सीक्रेट दोबारा फ़्लैग नहीं होता। रेपो में पहले से मौजूद चीज़ों की जाँच के लिए
credactor --scan-history .का उपयोग करें।
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.7.4 # pin to the latest release tag
hooks:
- id: credactor
- uses: rxb06/[email protected]
यह एक्शन हमेशा --ci पास करता है, इसलिए यह रिपोर्ट और गेट करता है लेकिन
चेकआउट को कभी फिर से नहीं लिखता। निष्कर्ष स्टेप को फेल कराते हैं; गेट किए बिना
रिपोर्ट करने के लिए fail-on-findings: false सेट करें। त्रुटि किसी भी स्थिति में स्टेप को फेल कराती है।
निष्कर्षों पर फेल होने के बजाय Code Scanning पर अपलोड करें:
- uses: rxb06/[email protected]
with:
format: sarif
upload-sarif: true
fail-on-findings: false
अपलोड के लिए जॉब को permissions: security-events: write चाहिए। हर इनपुट के लिए,
जिसमें Gitleaks, TruffleHog और Betterleaks रिपोर्ट्स का इनजेशन भी शामिल है,
CI इंटीग्रेशन गाइड देखें।
Credactor उन क्रेडेंशियल प्रकारों का पता लगाता है जो सबसे अधिक लीक होते हैं, और हर एक को एक गंभीरता सौंपता है ताकि आप एक नज़र में ट्राइएज कर सकें।
| श्रेणी | उदाहरण | गंभीरता |
|---|---|---|
| क्लाउड प्रोवाइडर कुंजियाँ | AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…) | Critical |
| प्लेटफ़ॉर्म टोकन | GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-) | Critical |
| निजी कुंजियाँ | PEM ब्लॉक (-----BEGIN … PRIVATE KEY-----) | Critical |
| JWTs | eyJ… तीन-खंड टोकन | High |
| कनेक्शन स्ट्रिंग्स | इनलाइन क्रेडेंशियल वाले URL (scheme://user:pass@host) | High |
| क्रेडेंशियल वेरिएबल | password = "…", api_key = "…", secret_key = "…" | High/Medium/Low |
| XML एट्रिब्यूट | <add key="Password" value="…" /> | High/Medium/Low |
| उच्च-एन्ट्रॉपी स्ट्रिंग्स | कोटेड hex (32–64 chars) / Base64 (60+ chars) | Medium/Low |
नियतात्मक प्रोवाइडर टोकन (ऊपर दिए गए प्रीफ़िक्स) एन्ट्रॉपी की परवाह किए बिना फ़्लैग किए जाते हैं। ह्यूरिस्टिक डिटेक्टर (JWTs, कनेक्शन स्ट्रिंग्स, hex, Base64) को एक एन्ट्रॉपी सीमा पार करनी होती है। अकेला hex या Base64 केवल तभी फ़्लैग होता है जब वह कोटेड हो। बिना कोट वाला उच्च-एन्ट्रॉपी मान केवल क्रेडेंशियल-नाम वाले वेरिएबल पर पकड़ा जाता है, जिससे git SHAs और checksums बच जाते हैं। पूर्ण पहचान और गंभीरता नियमों के लिए, मैनुअल देखें।
Credactor का मूल नियम सेट एक समर्पित स्कैनर की तुलना में संकीर्ण है, और कुछ प्रोवाइडर फ़ॉर्मैट (उदाहरण के लिए SendGrid, Twilio, और Slack webhooks) पहचाने नहीं जाते। इसकी बढ़त सुधार में है: सबसे व्यापक पहचान के लिए इसे Gitleaks, TruffleHog या Betterleaks के साथ जोड़ें, या इसे अकेले चलाएँ।
Credactor अपने आप में सक्षम है, और साथ में और मज़बूत हो जाता है। पहले से Gitleaks, TruffleHog या Betterleaks चलाते हैं? उनकी रिपोर्ट Credactor को दें और यह संयुक्त सेट को रिडैक्ट कर देता है, अपने स्वयं के निष्कर्षों के विरुद्ध डीडुप्लिकेट करते हुए (ओवरलैप पर, उच्च गंभीरता जीतती है)। एक सुधार पास आपके और उनके स्कैन दोनों को कवर करता है:
gitleaks dir . -f json -r gitleaks.json
credactor --from-gitleaks gitleaks.json --fix-all --yes .