
credactor v2.6.0
مسح. تنقيح. الالتزام نظيف.
Credactor
اكتشف السر. أصلحه. التزم بنظافة الكود.
ماسحات الأسرار بارعة في إطلاق الإنذار، لكنها لا تقدم الكثير من المساعدة في إخماده. تمنحك قائمة بالبيانات السرية المسربة وتترك لك مهمة التنظيف. 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). إعادة كتابة ملف ليست بديلاً عن إبطال بيانات اعتماد مسربة.
لماذا Credactor
- إعادة كتابة، وليس مجرد اكتشاف. معظم الماسحات تتوقف عند الاكتشاف. يستبدل Credactor السر في مكانه: علامة
REDACTED_BY_CREDACTORصارخة تفشل عند التشغيل افتراضياً، أو مرجع متغير بيئة واعٍ باللغة (Python، JavaScript/TypeScript، Go، Java/Kotlin، Ruby، PHP، وshell) مثلos.environ["KEY"]. الاستبدال كود صالح. إذا لم يكن الملف يتضمن بالفعل الاستيراد المطابق (على سبيل المثالimport os)، فأضفه. - آمن افتراضياً. كتابات ذرية، نسخ احتياطية تلقائية
.bak، حواجز حدود الروابط الرمزية وأذونات الملفات، وإخفاء كامل للسر في كل المخرجات. إذا تعذّر كتابة نسخة احتياطية آمنة، يتخطى Credactor الملف بدلاً من إعادة كتابته على نحو أعمى، وتعطّل أثناء الكتابة يترك الأصل سليماً. - صفر تبعيات وقت التشغيل. مكتبة Python 3.11+ القياسية الخالصة، بالإضافة إلى إضافة اختيارية للترميزات غير UTF-8.
- مصمم لخط الأنابيب. مخرجات SARIF لـ GitHub Code Scanning، وبوابة
--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
تُثبّت الصيغة في بيئة افتراضية خاصة بها وتتضمن الإضافة الاختيارية
[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
خطاف pre-commit
الخطاف يبوّب المحتوى المُجهّز فقط، لذا لا يُعاد الإبلاغ عن سر تم الالتزام به بالفعل. استخدم
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
GitHub Action
- 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 للرفع. راجع
دليل تكامل CI لكل المدخلات،
بما في ذلك استيعاب تقارير Gitleaks وTruffleHog وBetterleaks.
الاكتشاف
يكتشف Credactor أنواع بيانات الاعتماد الأكثر تسرباً، ويخصص لكل منها درجة خطورة لتتمكن من الفرز بنظرة واحدة.
| الفئة | أمثلة | الخطورة |
|---|---|---|
| مفاتيح مزوّدي السحابة | AWS (AKIA…)، GCP (AIza…)، Stripe (sk_live_…)، Slack (xoxb-…) | حرجة |
| رموز المنصات | GitHub (ghp_، github_pat_)، GitLab (glpat-)، npm (npm_)، PyPI (pypi-) | حرجة |
| المفاتيح الخاصة | كتل PEM (-----BEGIN … PRIVATE KEY-----) | حرجة |
| JWTs | رموز eyJ… ثلاثية المقاطع | عالية |
| سلاسل الاتصال | عناوين URL ببيانات اعتماد مضمّنة (scheme://user:pass@host) | عالية |
| متغيرات بيانات الاعتماد | password = "…"، api_key = "…"، secret_key = "…" | عالية/متوسطة/منخفضة |
| سمات XML | <add key="Password" value="…" /> | عالية/متوسطة/منخفضة |
| سلاسل عالية العشوائية | hex بين علامتي اقتباس (32–64 حرفاً) / Base64 (60+ حرفاً) | متوسطة/منخفضة |
رموز المزوّدين الحتمية (البادئات أعلاه) تُعلَّم بغض النظر عن العشوائية. أما الكواشف الاستدلالية (JWTs، سلاسل الاتصال، hex، Base64) فيجب أن تتجاوز حداً أدنى للعشوائية. يُعلَّم hex أو Base64 المستقل فقط عندما يكون بين علامتي اقتباس. القيمة عالية العشوائية غير المقتبسة تُلتقط فقط على متغير باسم بيانات اعتماد، ما يوفّر تجزئات git والمجاميع الاختبارية. للاطلاع على قواعد الاكتشاف والخطورة الكاملة، راجع الدليل.
مجموعة قواعد 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 .
betterleaks dir . -f json -r betterleaks.json
credactor --from-betterleaks betterleaks.json --fix-all --yes .
تتطلب --from-gitleaks / --from-trufflehog / --from-betterleaks (أو جدول [ingest] في .credactor.toml) هدفاً من نوع دليل — وجّه Credactor إلى نفس الجذر الذي شغّل الماسح ضده. تُحل مسارات التقارير مقابل دليل العمل، والتقرير لقطة: أعد توليده بعد إعادة الكتابة أو تغيير الشجرة. راجع دليل تكامل CI.