المستوى: مبتدئ — الأدوات اللي هتستخدمها كلها مفتوحة المصدر. لو بتعرف تفتح GitHub repo وتعدّل ملف YAML، انت جاهز.
لو في AWS access key واحد منسي في commit عمره سنة، أي حد عنده صلاحية قراءة على الـ repo يقدر يفتح حساب AWS بتاعك ويحرقلك آلاف الدولارات قبل ما تحس. Gitleaks بيكتشف أكتر من 160 نوع credentials في git history كاملة بـ 90 ثانية على repo فيه 50,000 commit، بصفر تكلفة شهرية على الـ public repos.
Gitleaks: الحارس اللي بيدور في كل commit قديم
المشكلة باختصار
المطوّر العادي بيحط API key في الكود علشان يجرّب لوكال. بعدين بينساه، بيعمل git commit، وبيدفع الكود على GitHub. حتى لو لاحظ بعد دقايق وحذف الـ key في commit جديد، النسخة القديمة بتفضل في git history للأبد.
تقرير GitGuardian للـ State of Secrets Sprawl 2024 رصد 23 مليون secret مسرّب في GitHub العام في 2023 لوحدها. زيادة 43% عن السنة اللي قبلها. الـ git diff HEAD~1 مش هيكتشف الحاجة دي. لازم أداة تمشي على blob كل commit في الـ history وتقارنه بقواعد regex متخصصة.
مثال للمبتدئ: خزنة البيت وغرفة الضيوف
تخيّل البيت بتاعك فيه خزنة. كل أسبوع بتحط فيها مفاتيح وبطاقات. جه يوم خرجت من البيت ونسيت مفتاح السيارة في درج قديم في غرفة الضيوف بدل الخزنة. بعد سنة، اشتريت قفل جديد للسيارة وقلت "خلاص أمنت". لكن المفتاح القديم لسه موجود في الدرج. أي حد دخل غرفة الضيوف يقدر يلاقيه ويفتح بيه القفل القديم لو لسه شغّال على بعض الأبواب.
git history زي درج غرفة الضيوف. حتى لو شلت الـ secret من الكود الحالي، فيه نسخة محفوظة في commit قديم لأي حد عنده صلاحية git clone. Gitleaks زي حارس بيدور في كل الأدراج وبيقولك "في مفتاح هنا، تعالى شوف بسرعة قبل ما حد تاني يلاقيه".
تعريف علمي: ليه grep لوحده مش كافي
الـ regex matching العادي بيدور على نمط ثابت زي AKIA[0-9A-Z]{16} للـ AWS access keys. المشكلة إن فيه نوعين من الـ secrets ما يقدرش grep يلاقيهم:
- High-entropy strings: الـ JWT tokens والـ private keys مالهاش بادئة محددة. لازم تحسب Shannon entropy للـ string وتقارنها بـ threshold (افتراضياً 4.5 bits/char). الـ string اللي عشوائي حقيقي بيبقى entropy عالي، والكلمة العادية entropy منخفض.
- Multi-line secrets: الـ RSA private keys بتمتد على 27+ سطر بين
-----BEGIN PRIVATE KEY-----و-----END PRIVATE KEY-----. grep يدور سطر سطر و يفشل في الإمساك بيها.
Gitleaks بيستخدم 160+ قاعدة معرّفة في ملف gitleaks.toml الرسمي. كل قاعدة فيها regex + entropy threshold + allowlist patterns لتقليل الـ false positives. النسخة 8.30.1 (مارس 2026) ضافت parallelized git scanning بيخلّي السرعة أعلى 3x على repos الكبيرة، و detection للـ doubly-encoded credentials.