
स्कैन करें। रिडैक्ट करें। साफ कमिट करें।
रहस्य खोजें। उसे ठीक करें। साफ-सुथरा कमिट करें।
सीक्रेट स्कैनर अलार्म बजाने में अच्छे होते हैं और उसे बुझाने में ज़्यादा मददगार नहीं होते। वे आपको लीक हुई क्रेडेंशियल्स की एक सूची देते हैं और सफाई आप पर छोड़ देते हैं। Credactor इस चक्र को पूरा करता है: यह हार्डकोडेड सीक्रेट ढूंढता है और उसे उसी स्थान पर फिर से लिखता है, ताकि एक लीक एक ही कमांड में पता लगाने से लेकर ठीक करने तक पहुंच जाए।
क्रेडेंशियल्स को सोर्स कोड से बाहर रखना एक बुनियादी सुरक्षा अभ्यास है, वैकल्पिक नहीं। Credactor उस बुनियाद को सस्ता बनाए रखता है, आपकी मशीन पर कमिट से पहले या CI में मर्ज से पहले। इसे अकेले चलाएं, या उन स्कैनरों के साथ जिन पर आप पहले से भरोसा करते हैं।
# Credactor यह ढूंढता है:
db_password = "h8Tq2vKp9mRz4Wd"
# डिफ़ॉल्ट रूप से यह सीक्रेट को एक सेंटिनल के रूप में फिर से लिखता है जो रनटाइम पर ज़ोर से विफल होता है:
db_password = "REDACTED_BY_CREDACTOR"
# --replace-with env के साथ, यह एक संदर्भ लिखता है जो पर्यावरण से पढ़ता है:
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 शामिल नहीं है (उदाहरण के लिए import os), तो उसे जोड़ें।.bak बैकअप, सिमलिंक-सीमा और फाइल-अनुमति गार्ड, और हर आउटपुट में पूर्ण-सीक्रेट मास्किंग। यदि सुरक्षित बैकअप नहीं लिखा जा सकता है, तो Credactor फाइल को आँख बंद करके फिर से लिखने के बजाय छोड़ देता है, और लिखने के बीच में क्रैश होने पर मूल फाइल बरकरार रहती है।--ci गेट, एक pre-commit हुक (बीटा), और Gitleaks या TruffleHog रिपोर्ट का अंतर्ग्रहण। Gitleaks या TruffleHog के साथ पता लगाएं, Credactor के साथ उपचार करें।pip install credactor
Python 3.11+ की आवश्यकता है। कोई अन्य निर्भरता नहीं। Linux, macOS, और Windows पर चलता है (Linux और Windows पर CI-परीक्षित)।
स्रोत से:
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
credactor फिर किसी भी निर्देशिका से काम करता है।
रिडक्ट करने से पहले
--dry-runचलाएं और निष्कर्षों की समीक्षा करें। गलत सकारात्मक संभव हैं, और--fix-allके तहत एक गलत सकारात्मक को फिर से लिखा जाता है। ज्ञात-सुरक्षित मानों को# credactor:ignoreया.credactorignoreप्रविष्टि के साथ दबाएं।
credactor --dry-run . # स्कैन करें, कुछ न बदलें
credactor . # स्कैन करें, फिर इंटरैक्टिव रूप से रिडक्ट करें (प्रति निष्कर्ष y/n)
credactor --fix-all . # एक पुष्टि के बाद सब कुछ रिडक्ट करें
credactor --fix-all --yes . # गैर-इंटरैक्टिव रूप से रिडक्ट करें (CI / स्क्रिप्ट)
credactor --ci . # केवल-पढ़ने योग्य गेट: निष्कर्षों पर exit 1
credactor --replace-with env . # सेंटिनल के बजाय env-var संदर्भों में रिडक्ट करें
हुक एकीकरण बीटा में है। अकेले उस पर भरोसा करने से पहले
credactor --dry-run .मैन्युअल रूप से चलाएं।
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.6.0 # नवीनतम रिलीज़ टैग पर पिन करें
hooks:
- id: credactor
Credactor उन क्रेडेंशियल प्रकारों का पता लगाता है जो सबसे अधिक बार लीक होते हैं, और प्रत्येक को एक गंभीरता प्रदान करता है ताकि आप एक नज़र में ट्राइएज कर सकें।
| श्रेणी | उदाहरण | गंभीरता |
|---|---|---|
| क्लाउड प्रदाता कुंजियाँ | AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…) | क्रिटिकल |
| प्लेटफ़ॉर्म टोकन | GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-) | क्रिटिकल |
| निजी कुंजियाँ | PEM ब्लॉक (-----BEGIN … PRIVATE KEY-----) | क्रिटिकल |
| JWT | eyJ… तीन-खंड टोकन | उच्च |
| कनेक्शन स्ट्रिंग्स | इनलाइन क्रेडेंशियल्स वाले URL (scheme://user:pass@host) | उच्च |
| क्रेडेंशियल चर | password = "…", api_key = "…", secret_key = "…" | उच्च/मध्यम/निम्न |
| XML विशेषताएँ | <add key="Password" value="…" /> | उच्च/मध्यम/निम्न |
| उच्च-एन्ट्रॉपी स्ट्रिंग्स | उद्धृत हेक्स (32–64 वर्ण) / Base64 (60+ वर्ण) | मध्यम/निम्न |
नियतात्मक प्रदाता टोकन (उपरोक्त उपसर्ग) एन्ट्रॉपी की परवाह किए बिना चिह्नित किए जाते हैं। अनुमानी डिटेक्टरों (JWT, कनेक्शन स्ट्रिंग्स, हेक्स, Base64) को एन्ट्रॉपी फ़्लोर साफ करना होगा। स्टैंडअलोन हेक्स या Base64 केवल उद्धृत होने पर चिह्नित किया जाता है। एक बिना उद्धृत उच्च-एन्ट्रॉपी मान केवल क्रेडेंशियल-नामित चर पर पकड़ा जाता है, जो git SHA और चेकसम को बचाता है। पूर्ण पता लगाने और गंभीरता नियमों के लिए, मैनुअल देखें।
Credactor का मूल नियम सेट एक समर्पित स्कैनर की तुलना में संकीर्ण है, और कुछ प्रदाता प्रारूप (उदाहरण के लिए SendGrid, Twilio, और Slack वेबहुक) का पता नहीं लगाया जाता है। इसका किनारा उपचार है: व्यापक पता लगाने के लिए इसे Gitleaks या TruffleHog के साथ जोड़ें, या इसे अकेले चलाएं।
Credactor अपने आप में खड़ा है, और कंपनी में और मजबूत होता है। पहले से Gitleaks या TruffleHog चला रहे हैं? उनकी रिपोर्ट Credactor को दें और यह संयुक्त सेट को रिडक्ट करता है, अपने स्वयं के निष्कर्षों के खिलाफ डीडुप्लिकेट किया गया (ओवरलैप पर, उच्च गंभीरता जीतती है)। एक उपचार पास आपके स्कैन और उनके दोनों को कवर करता है:
gitleaks dir . -f json -r gitleaks.json
credactor --from-gitleaks gitleaks.json --fix-all --yes .
--from-gitleaks / --from-trufflehog (या .credactor.toml में एक [ingest] तालिका) के लिए एक निर्देशिका लक्ष्य की आवश्यकता होती है — Credactor को उसी रूट पर इंगित करें जिस पर स्कैनर चला था। रिपोर्ट पथ कार्यशील निर्देशिका के खिलाफ हल होते हैं, और एक रिपोर्ट एक स्नैपशॉट है: रिडक्ट करने या ट्री बदलने के बाद इसे पुनर्जीवित करें। CI एकीकरण गाइड देखें।
--replacement के माध्यम से एक कस्टम प्रतिस्थापन स्ट्रिंग; git कमिट इतिहास को स्कैन करने के लिए --scan-history--secure-delete (.bak को अधिलेखित और हटा देता है; आकस्मिक पुनर्प्राप्ति के खिलाफ बार बढ़ाता है, फोरेंसिक गारंटी नहीं) या रिपॉजिटरी के बाहर बैकअप संग्रहीत करने के लिए --secure-backup-dir# credactor:ignore और .credactorignore अनुमति सूचियाँ (ग्लोब्स, file:line, मान शाब्दिक).credactor.toml के माध्यम से प्रति-रिपो बिन्यास.txt शामिल); JSON शामिल करने के लिए --scan-json; फाइल पढ़ने में विफल होने पर विफल होने के लिए --fail-on-error
.py.js.ts.jsx.tsx.sh.bash.env.cfg.ini.toml.yaml.yml.rb.go.java.php.cs.kt.tf.hcl.conf.config.properties.xml.pem.key.crt.txt
साथ ही .env.* / .env-* वेरिएंट (.env.local, .env.production) और SSH / निजी-कुंजी फाइलें (id_rsa, id_dsa, id_ecdsa, id_ed25519), सभी एक्सटेंशन के बजाय फ़ाइलनाम से मेल खाते हैं। JSON डिफ़ॉल्ट रूप से बाहर रखा गया है क्योंकि API प्रतिक्रियाएँ उच्च गलत-सकारात्मक दर उत्पन्न करती हैं; इसे शामिल करने के लिए --scan-json जोड़ें। कमांड लाइन पर सीधे नामित एक फाइल को स्कैन किया जाता है भले ही उसका एक्सटेंशन इस सूची में न हो।
| कोड | अर्थ |
|---|---|
0 | कोई निष्कर्ष नहीं, या सभी हल हो गए |
1 | अनसुलझे निष्कर्ष |
2 | त्रुटि (उदाहरण के लिए: खराब पथ, खतरनाक --replacement, --ci --fix-all, एक लापता या अमान्य अंतर्ग्रहण रिपोर्ट, या अपठनीय फाइल के साथ --fail-on-error) |
एक सुरक्षा उपकरण को स्थापित करना सुरक्षित होना चाहिए, न केवल चलाना। Credactor की बिल्ड और रिलीज़ पाइपलाइन अंत से अंत तक कठोर है; पूर्ण विवरण सुरक्षा दस्तावेज़ में।
pip install credactor कोई तृतीय-पक्ष पैकेज नहीं खींचता (केवल वैकल्पिक [encoding] अतिरिक्त), इसलिए स्थापना के समय जांचने के लिए कुछ भी नहीं है।--require-hashes लॉकफाइल से स्थापित होते हैं, बिल्ड बैकएंड सहित (python -m build --no-isolation एक पिन किए गए setuptools के खिलाफ), ताकि एक छेड़छाड़ की गई निर्भरता बिल्ड को विफल कर दे।scripts/audit_wheel.py व्हील और sdist की तुलना प्रतिबद्ध स्रोत से बाइट दर बाइट (sha256 बनाम git HEAD) करता है; कोई भी जोड़ी, लापता, या परिवर्तित फाइल गेट को विफल कर देती है, ताकि एक बिल्ड चरण कोड को अनजाने में इंजेक्ट न कर सके।contents: read, केवल प्रकाशन कार्य के लिए id-token: write।| दस्तावेज़ | विवरण |
|---|---|
| सेटअप गाइड | स्थापना, बिन्यास, CI/CD एकीकरण |
| मैनुअल | पूर्ण संदर्भ: हर फ्लैग, मोड, और संयोजन, प्रतिस्थापन और बैकअप व्यवहार, पता लगाना और गंभीरता, निकास कोड, और सीमाएँ (व्यवहार परीक्षण-सत्यापित) |
| उदाहरण | आउटपुट के साथ सामान्य वर्कफ़्लो |
| CI एकीकरण | Pre-commit हुक, CI पाइपलाइन |
| सुरक्षा | खतरा मॉडल, सख्तीकरण उपाय, ज्ञात सीमाएँ |
| चेंजलॉग | संस्करण इतिहास |
| योगदान | विकास सेटअप, कोड शैली, PR प्रक्रिया |
| अस्वीकरण | सीमाएँ, सुरक्षित उपयोग, वारंटी |
Apache 2.0. LICENSE देखें।