
स्कैन करें। रिडैक्ट करें। साफ कमिट करें।
राज़ ढूँढ़ें। उसे ठीक करें। साफ़-सुथरा कमिट करें।
सीक्रेट स्कैनर अलार्म बजाने में तो अच्छे हैं, लेकिन आग बुझाने में ज़्यादा मददगार नहीं। वे आपको लीक हुई क्रेडेंशियल्स की एक सूची थमा देते हैं और सफ़ाई आप पर छोड़ देते हैं। Credactor इस चक्र को पूरा करता है: यह हार्डकोडेड सीक्रेट को ढूँढ़ता है और उसे उसी स्थान पर फिर से लिखता है, ताकि एक लीक का पता लगने से लेकर उसे ठीक करने तक का काम एक ही कमांड में हो जाए।
क्रेडेंशियल्स को सोर्स कोड से दूर रखना एक बुनियादी सुरक्षा अभ्यास है, कोई वैकल्पिक नहीं। Credactor उस बुनियादी स्तर को बनाए रखना सस्ता बनाता है, चाहे आपकी मशीन पर कमिट से पहले या CI में मर्ज से पहले। इसे अकेले चलाएँ, या अपने भरोसेमंद स्कैनर के साथ।
# Credactor को यह मिलता है:
db_password = "h8Tq2vKp9mRz4Wd"
# डिफ़ॉल्ट रूप से यह सीक्रेट को एक ऐसे सेंटिनल से बदल देता है जो रनटाइम पर ज़ोर से फेल होता है:
db_password = "REDACTED_BY_CREDACTOR"
# --replace-with env के साथ, यह एक रेफरेंस लिखता है जो पर्यावरण से पढ़ता है:
db_password = os.environ["DB_PASSWORD"]
रिडक्शन आपकी वर्किंग ट्री में फ़ाइलों को फिर से लिखता है। यदि कोई सीक्रेट पहले ही कमिट हो चुका है, तो कुंजी (key) को घुमाएँ (rotate) और इतिहास को भी साफ़ करें (उदाहरण के लिए,
git filter-repoके साथ)। किसी फ़ाइल को फिर से लिखना, लीक हुई क्रेडेंशियल को रद्द (revoke) करने का विकल्प नहीं है।
REDACTED_BY_CREDACTOR सेंटिनल जो रनटाइम पर फेल होता है, या भाषा-जागरूक पर्यावरण-चर संदर्भ (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP, और शेल) जैसे os.environ["KEY"]। प्रतिस्थापन मान्य कोड है। यदि फ़ाइल में पहले से मेल खाने वाला import नहीं है (उदाहरण के लिए import os), तो उसे जोड़ें।.bak बैकअप, सिमलिंक-बाउंड्री और फ़ाइल-अनुमति गार्ड, और हर आउटपुट में पूर्ण-सीक्रेट मास्किंग। यदि सुरक्षित बैकअप नहीं लिखा जा सकता है, तो Credactor फ़ाइल को आँख बंद करके फिर से लिखने के बजाय छोड़ देता है, और बीच में क्रैश होने पर मूल फ़ाइल बरकरार रहती है।--ci गेट, एक प्री-कमिट हुक (बीटा), और Gitleaks या TruffleHog रिपोर्ट का इन्जेशन (BETA, और आने वाले और)। Gitleaks या TruffleHog से पता लगाएँ, Credactor से उपचार करें।pip install credactor
Python 3.11+ चाहिए। कोई अन्य निर्भरता नहीं। Linux, macOS, और Windows पर चलता है (CI में Linux और Windows पर परीक्षित)।
स्रोत (source) से:
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
credactor फिर किसी भी निर्देशिका से काम करता है।
पहले
--dry-runचलाएँ और रिडक्शन से पहले निष्कर्षों की समीक्षा करें। गलत सकारात्मक (false positive) संभव हैं, और--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.5.0 # नवीनतम रिलीज़ टैग पर पिन करें
hooks:
- id: credactor
Credactor उन क्रेडेंशियल प्रकारों का पता लगाता है जो सबसे अधिक लीक होते हैं, और प्रत्येक को एक गंभीरता (severity) प्रदान करता है ताकि आप एक नज़र में ट्राइएज कर सकें।
नियतात्मक प्रदाता टोकन (ऊपर के उपसर्ग) एन्ट्रॉपी की परवाह किए बिना चिह्नित किए जाते हैं। अनुमानात्मक (heuristic) डिटेक्टर (JWT, कनेक्शन स्ट्रिंग्स, हेक्स, Base64) को एन्ट्रॉपी फ़्लोर पार करना होता है। स्वतंत्र हेक्स या Base64 को केवल तभी चिह्नित किया जाता है जब वह उद्धृत हो। एक अनुद्धृत उच्च-एन्ट्रॉपी मान केवल क्रेडेंशियल-नामित वेरिएबल पर पकड़ा जाता है, जो git SHAs और चेकसम को बचाता है। पूर्ण पता लगाने और गंभीरता नियमों के लिए, मैनुअल देखें।
Credactor का मूल नियम सेट एक समर्पित स्कैनर की तुलना में संकीर्ण है, और कुछ प्रदाता प्रारूप (उदाहरण के लिए SendGrid, Twilio, और Slack वेबहुक) का पता नहीं चलता है। इसकी ताकत उपचार (remediation) है: सबसे व्यापक पता लगाने के लिए इसे 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] तालिका) के लिए एक निर्देशिका लक्ष्य आवश्यक है। 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
साथ ही .env.* / .env-* वेरिएंट (.env.local, .env.production) और SSH / निजी-कुंजी फ़ाइलें (id_rsa, id_dsa, id_ecdsa, id_ed25519), सभी एक्सटेंशन के बजाय फ़ाइल नाम से मिलान किए जाते हैं। JSON को डिफ़ॉल्ट रूप से बाहर रखा गया है क्योंकि API प्रतिक्रियाएँ उच्च गलत-सकारात्मक दर उत्पन्न करती हैं; इसे शामिल करने के लिए --scan-json जोड़ें। कमांड लाइन पर सीधे नामित फ़ाइल को स्कैन किया जाता है, भले ही उसका एक्सटेंशन इस सूची में न हो।
| कोड | अर्थ |
|---|---|
0 | कोई निष्कर्ष नहीं, या सभी हल हो गए |
एक सुरक्षा उपकरण को केवल चलाने के लिए ही नहीं, बल्कि स्थापित करने के लिए भी सुरक्षित होना चाहिए। 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।Apache 2.0. LICENSE देखें।
| श्रेणी | उदाहरण | गंभीरता |
|---|
| क्लाउड प्रदाता कुंजियाँ | 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) |
| JWT | eyJ… तीन-खंड वाले टोकन | उच्च (High) |
| कनेक्शन स्ट्रिंग्स | इनलाइन क्रेडेंशियल वाले URL (scheme://user:pass@host) | उच्च (High) |
| क्रेडेंशियल वेरिएबल | password = "…", api_key = "…", secret_key = "…" | उच्च/मध्यम/निम्न |
| XML विशेषताएँ | <add key="Password" value="…" /> | उच्च/मध्यम/निम्न |
| उच्च-एन्ट्रॉपी स्ट्रिंग्स | उद्धृत हेक्स (32–64 वर्ण) / Base64 (60+ वर्ण) | मध्यम/निम्न |
.php.cs.kt.tf.hcl.conf.config.properties.xml.pem.key.crt.txt1 | अनसुलझे निष्कर्ष |
2 | त्रुटि (उदाहरण: गलत पथ, खतरनाक --replacement, --ci --fix-all, या --fail-on-error अपठनीय फ़ाइल के साथ) |
| दस्तावेज़ | विवरण |
|---|
| सेटअप गाइड | स्थापना, कॉन्फ़िगरेशन, CI/CD एकीकरण |
| मैनुअल | पूरा संदर्भ: हर फ्लैग, मोड और संयोजन, प्रतिस्थापन और बैकअप व्यवहार, पता लगाना और गंभीरता, एग्ज़िट कोड, और सीमाएँ (व्यवहार परीक्षण-सत्यापित) |
| उदाहरण | आउटपुट के साथ सामान्य वर्कफ़्लो |
| CI एकीकरण | प्री-कमिट हुक, CI पाइपलाइन |
| सुरक्षा | थ्रेट मॉडल, सख्ती के उपाय, ज्ञात सीमाएँ |
| चेंजलॉग | संस्करण इतिहास |
| योगदान | विकास सेटअप, कोड शैली, PR प्रक्रिया |
| अस्वीकरण | सीमाएँ, सुरक्षित उपयोग, वारंटी |