المستوى: مبتدئ. المقال ده مكتوب لحد لسه بادئ في Git وأمن الكود. لو محترف، انزل على قسم الـ trade-offs والإعداد على طول.
امنع تسريب مفتاح API في Git تلقائياً بـ Gitleaks
بعد ما تخلّص المقال ده هيكون عندك حارس تلقائي بيوقف أي مفتاح سري قبل ما يدخل تاريخ المشروع. السطر اللي بيحطّك في مصيبة بيتمسك في أقل من ثانية، على جهازك، قبل ما يوصل GitHub.
المشكلة باختصار
تخيّل إنك نسخت مفتاح بيت في ورقة، والورقة دي اتصوّرت ووُزّعت على 20 شخص. تمزّق الأصل دلوقتي مش هيرجّع النسخ. ده بالظبط اللي بيحصل في Git.
لو كتبت مفتاح AWS في ملف، وعملت commit، ثم مسحته في commit تاني، المفتاح لسه موجود في تاريخ المشروع. أي حد يعمل git clone يقدر يطلّعه. الافتراض إنك "مسحته" غلط؛ Git بيحفظ كل نسخة.
والمشكلة دي مش نظرية. حسب تقرير GitGuardian لسنة 2024، اتسرّب أكتر من 12.8 مليون سر جديد علناً على GitHub في سنة واحدة. مفتاح واحد بيكفي إن حد يشغّل سيرفرات على حسابك ويسيبلك فاتورة بآلاف الدولارات.
يعني إيه "سر" وليه الفحص اليدوي بيفشل
السر (Secret) هو أي قيمة بتثبت هويتك لخدمة: مفتاح API، كلمة مرور قاعدة بيانات، توكن. ليها أنماط معروفة. مثلاً مفتاح AWS بيبدأ بـ AKIA وطوله 20 حرف. توكن GitHub بيبدأ بـ ghp_.
الفحص بالعين بيفشل لأنك بشري. ممكن تنسى ملف .env مرة واحدة في 200 commit، والمرة دي كفاية. الحل إنك تخلّي برنامج يفحص بدالك في كل مرة، أوتوماتيك، من غير ما تفتكر.
الأداة اللي هنستخدمها اسمها Gitleaks. هي أداة مفتوحة المصدر بتفحص ملفاتك بقواعد جاهزة (regex) لأنماط الأسرار، وبتقولك: الملف ده، السطر ده، فيه سر.
الحل: حارس من طبقتين
هنبني خطّين دفاع، مش خط واحد. ركز في الفرق:
- الطبقة الأولى (pre-commit): فحص على جهازك قبل ما يتسجّل الـ commit أصلاً. لو فيه سر، الـ commit بيتوقف. السر ما خرجش من جهازك.
- الطبقة الثانية (CI): فحص على GitHub Actions بعد الـ push. شبكة أمان تمسك أي حاجة فاتت، مثلاً لو زميل مفعّلش الطبقة الأولى.
الخطوة 1: التثبيت
# على Mac
brew install gitleaks
# على Linux (تنزيل النسخة الجاهزة)
# راجع صفحة الإصدارات لاختيار معمارية جهازك
gitleaks version
الخطوة 2: جرّب الفحص بإيدك مرة
الأمر الحديث للفحص المحلي على التغييرات اللي عملتلها git add هو: