
credactor v2.6.0
स्कैन करें। रिडैक्ट करें। साफ कमिट करें।
Credactor
सीक्रेट खोजें। उसे ठीक करें। साफ़-सुथरा कमिट करें।
अधिकांश सीक्रेट स्कैनर अलर्ट पर ही रुक जाते हैं: आपको लीक हुए क्रेडेंशियल्स की एक सूची मिलती है और सफ़ाई का काम आपका होता है। Credactor हार्डकोडेड सीक्रेट्स को ढूँढता है और उन्हें मौके पर ही फिर से लिख देता है, ताकि आपके वर्किंग ट्री में मौजूद लीक एक ही कमांड में मिलने से लेकर ठीक होने तक पहुँच जाए। यह आपकी मशीन पर, प्री-कमिट हुक के रूप में, या CI गेट के रूप में चलता है, और यह Gitleaks, TruffleHog या Betterleaks जो पाते हैं उसे भी ठीक कर सकता है।
# Before
db_password = "h8Tq2vKp9mRz4Wd"
# credactor --fix-all . (default: a sentinel that fails loudly at runtime)
db_password = "REDACTED_BY_CREDACTOR"
# credactor --replace-with env --fix-all . (read it from the environment)
db_password = os.environ["DB_PASSWORD"]
Redaction आपके working tree को साफ़ करता है। यह credential को revoke नहीं करता और git history को नहीं छूता। अगर कोई secret कभी commit या साझा किया गया था, तो उसे rotate करें, और अगर आपको उसे वहाँ से भी हटाना है तो history को फिर से लिखें (उदाहरण के लिए
git filter-repoके साथ)।
Credactor क्यों
- यह सिर्फ़ flag नहीं करता, ठीक भी करता है। प्रत्येक finding को उसी जगह sentinel, आपके अपने marker, या फ़ाइल की अपनी भाषा में environment-variable lookup से बदल दिया जाता है।
- सावधानी से लिखाई। प्रत्येक edit को memory में plan किया जाता है, पहले backup लिया जाता है (mode
0600), temp file में लिखा जाता है और फिर rename करके जगह पर रखा जाता है। run के दौरान बदली गई फ़ाइल, scan root से बाहर जाने वाला path, या private key block को चेतावनी के साथ छोड़ दिया जाता है, और उसका finding रिपोर्ट होता रहता है। - आप जो scanner पहले से चलाते हैं, उसके साथ काम करता है। इसे Gitleaks, TruffleHog या Betterleaks report दें और यह उनके findings और अपने findings को एक ही deduplicated pass में ठीक कर देता है।
- pipelines के लिए बनाया गया। स्पष्ट exit codes वाला read-only
--cigate, GitHub Code Scanning के लिए line और column locations के साथ SARIF 2.1.0, एक GitHub Action और एक pre-commit hook। हर report format में secrets masked रहते हैं, और text output साफ़ किया जाता है ताकि कोई scanned फ़ाइल आपके terminal या log में escape sequences या CI workflow commands inject न कर सके। - Releases अपने source के विरुद्ध जाँचे गए। Pure Python 3.11+ standard
library, कोई runtime dependency नहीं। PyPI पर release पहुँचने से पहले, wheel और sdist में हर
Credactor फ़ाइल की tagged source के साथ byte for byte तुलना की जाती है, और package metadata का
pyproject.tomlसे मेल होना चाहिए (देखें Supply-chain hardening)।
यह अकेले सही tool कहाँ नहीं है: इसके built-in rules उन credential formats को कवर करते हैं जो सबसे अधिक leak होते हैं, सैकड़ों providers को नहीं, और यह जाँचता नहीं कि कोई secret live है या नहीं। एक clean run का मतलब है कि इसके rules से कुछ match नहीं हुआ, यह नहीं कि code में कोई secrets नहीं हैं। व्यापकता के लिए इसे एक समर्पित scanner के साथ जोड़ें (देखें Bring your own scanner)।
Install
pip install credactor
uv के साथ, इसे एक टूल के रूप में इंस्टॉल करें, या इसे बिना इंस्टॉल किए एक बार चलाएँ:
uv tool install credactor
uvx credactor --dry-run .
या macOS और Linux पर Homebrew के साथ:
brew install rxb06/tap/credactor
Python 3.11 या नया आवश्यक है। Linux और Windows पर CI में परीक्षण किया गया, Python 3.11 से
3.13 तक। UTF-8, Latin-1 या सरल UTF-16 के अलावा अन्य एन्कोडिंग वाली फ़ाइलों के लिए, वैकल्पिक
अतिरिक्त जोड़ें: pip install 'credactor[encoding]' या
uv tool install 'credactor[encoding]' (Homebrew फ़ॉर्मूला इसे शामिल करता है)।
त्वरित शुरुआत
1. देखें कि यह क्या ढूँढता है। कुछ भी नहीं बदला जाता।
credactor --dry-run .
======================================================================
CREDENTIAL SCAN REPORT -- 2 finding(s) in 1 file(s)
======================================================================
FILE: config.py
────────────────────────────────────────────────────────────
Line 3 [HIGH] [variable:db_password]
db_password = "h8Tq[REDACTED]"
Line 4 [CRITICAL] [pattern:AWS access key]
aws_key = "AKIA[REDACTED]"
रिपोर्ट प्रत्येक सीक्रेट के केवल पहले चार अक्षर दिखाती हैं।
2. उन्हें ठीक करें। पहले निष्कर्षों की समीक्षा करें: --fix-all हर एक को फिर से लिखता है,
जिसमें गलत सकारात्मक भी शामिल हैं। किसी एक को रखने के लिए, उसकी पंक्ति में # credactor:ignore जोड़ें
(देखें गलत सकारात्मक को दबाएँ) या इंटरैक्टिव रूप से ठीक करें और n उत्तर दें। प्रत्येक फ़ाइल को बदलने से पहले, उसके बगल में एक .bak प्रति
लिखी जाती है ताकि आप पूर्ववत कर सकें।
credactor . # ask y/N for each finding (needs a terminal)
credactor --fix-all . # fix all after one confirmation
credactor --fix-all --yes . # fix all, no prompt (scripts)
credactor --replace-with env --fix-all . # environment lookups instead of the sentinel
Env मोड lookup लिखता है, import नहीं: यदि फ़ाइल में import os या आपकी भाषा का समकक्ष न हो तो उसे जोड़ें। Windows Git Bash पर, इंटरैक्टिव मोड को winpty credactor . के रूप में चलाएँ।
3. जाँचें, फिर बैकअप साफ़ करें। प्रत्येक .bak में अभी भी मूल secret मौजूद है, और Credactor आपकी .gitignore को कभी संपादित नहीं करता, इसलिए एक साधारण git add . उसे stage कर देगा।
diff config.py.bak config.py # check what changed
cp config.py.bak config.py # undo
*.bak और *.credactor.tmp को .gitignore में जोड़ें और संतुष्ट होने पर
बैकअप हटा दें। शुरुआत से ही बैकअप को ट्री से बाहर रखने के लिए, fix रन पर
--secure-backup-dir DIR (रिपॉज़िटरी के बाहर एक डायरेक्टरी) पास करें।
--secure-delete इसके बजाय प्रत्येक बैकअप को मिटा देता है, जिससे git ही आपका
एकमात्र undo रह जाता है।
एक नज़र में कमांड
| कमांड | यह क्या करता है | फ़ाइलें बदलता है |
|---|---|---|
credactor --dry-run . | निष्कर्षों की रिपोर्ट करें | नहीं |
credactor . | एक बार में एक निष्कर्ष की समीक्षा करें और ठीक करें | हाँ, y पर |
credactor --fix-all . | एक पुष्टि के बाद हर निष्कर्ष ठीक करें | हाँ |
credactor --ci . | गेट: निष्कर्षों पर exit 1 | कभी नहीं |
credactor --staged --ci . | केवल कमिट के लिए staged चीज़ों पर गेट | कभी नहीं |
credactor --scan-history . | पिछले 100 फ़ाइल-परिवर्तन करने वाले कमिट स्कैन करें | कभी नहीं |
credactor --ci -f sarif . > results.sarif | Code Scanning के लिए SARIF 2.1.0 | कभी नहीं |
credactor --ci -f json . > findings.json | मशीन-पठनीय रिपोर्ट | कभी नहीं |
हर फ़्लैग और संयोजन Manual में है।
इसे pre-commit और CI में उपयोग करें
Pre-commit hook
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.7.5
hooks:
- id: credactor
pre-commit install
हर git commit फिर स्टेज किए गए कंटेंट को स्कैन करता है और यदि उसमें कोई
क्रेडेंशियल होता है तो उसे ब्लॉक कर दिया जाता है। हुक कभी भी फ़ाइलों को फिर से नहीं लिखता। इसके लिए pre-commit 3.2.0 या उससे नया संस्करण आवश्यक है;
फ़्रेमवर्क के बिना, standalone hook देखें।
GitHub Action
steps:
- uses: actions/checkout@v7
- uses: rxb06/[email protected]