
مسح. تنقيح. الالتزام نظيف.
اعثر على السر. أصلحه. التزم بالنظافة.
أدوات فحص الأسرار جيدة في إطلاق الإنذار، لكنها ليست ذات فائدة كبيرة في إخماده. فهي تسلّمك قائمة بالبيانات الاعتمادية المسرّبة وتترك التنظيف لك. 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 os)، قم بإضافته..bak، حماية لحدود الروابط الرمزية وأذونات الملفات، وإخفاء كامل للسر في كل المخرجات. إذا تعذرت كتابة نسخة احتياطية آمنة، يتخطى Credactor الملف بدلاً من إعادة كتابته بشكل أعمى، وأي تعطل في منتصف الكتابة يترك الأصل سليمًا.--ci للقراءة فقط مع رموز خروج دقيقة، وخطاف pre-commit (نسخة تجريبية)، واستيعاب تقارير Gitleaks أو TruffleHog. اكتشف باستخدام Gitleaks أو TruffleHog، وعالج باستخدام Credactor.pip install credactor
يتطلب Python 3.11+. لا توجد تبعيات أخرى. يعمل على Linux وmacOS وWindows (مُختبَر على CI على Linux وWindows).
من المصدر:
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 . # فحص، ثم إعادة كتابة تفاعلية (نعم/لا لكل نتيجة)
credactor --fix-all . # إعادة كتابة كل شيء بعد تأكيد واحد
credactor --fix-all --yes . # إعادة كتابة غير تفاعلية (CI / سكربتات)
credactor --ci . # بوابة قراءة فقط: خروج 1 عند وجود نتائج
credactor --replace-with env . # إعادة كتابة إلى مراجع متغيرات بيئة بدلاً من القيمة الحارسة
تكامل الخطاف في مرحلة تجريبية. شغّل
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-----) | حرجة |
| 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) لا يتم اكتشافها. قوتها في المعالجة: اقرنها بـ 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 (أو جدول [ingest] في .credactor.toml) يتطلبان هدف دليل — وجّه Credactor إلى نفس الجذر الذي شغّل عليه الفاحص. مسارات التقرير تُحلّ مقابل دليل العمل، والتقرير لقطة: أعد توليده بعد إعادة الكتابة أو تغيير الشجرة. راجع دليل تكامل CI.
--replacement؛ --scan-history لفحص سجل التزامات git--secure-delete (الكتابة فوق وإزالة .bak؛ يرفع الحاجز ضد الاسترداد العادي، وليس ضمانًا جنائيًا) أو --secure-backup-dir لتخزين النسخ الاحتياطية خارج المستودع# credactor:ignore و.credactorignore (أنماط glob، file:line، قيم حرفية).credactor.toml.txt)؛ --scan-json لتضمين 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 |
| الأمان | نموذج التهديد، إجراءات التقوية، القيود المعروفة |
| سجل التغييرات | تاريخ الإصدارات |
| المساهمة | إعداد التطوير، نمط الكود، عملية طلبات السحب |
| إخلاء المسؤولية | القيود، الاستخدام الآمن، الضمان |
Apache 2.0. راجع LICENSE.