لماذا يكشف git log عن الأسرار حتى بعد حذفها؟
حذف سطر من ملف و commitإن تغيير هذا التغيير لا يزيل البيانات الحساسة من مستودعك. إذا كان هذا السر، أو مفتاح واجهة برمجة التطبيقات، أو بيانات الاعتماد، أو الرمز، قد تم حذفه، committed، فهو موجود في سجل Git الخاص بك. أي شخص يستخدم git log -p, عرض بوابة، أو فحص الاختلافات عن الماضي commitلا يزال بإمكاني استرجاعه.
حتى لو قمت بالكتابة فوق ملف أو استبدال القيمة، سجل جيت يحافظ على التسلسل الكامل لكل تغيير. هذا تصميمي. يعتمد نموذج Git بأكمله على تسلسل ثابت. commit التاريخ والنسخ الموزعة. لذا، ما لم تُعِد كتابة التاريخ صراحةً، فستظل أسرارك موجودة. وهنا حالة عملية:
⚠️ مثال تعليمي، لا يتم تشغيله في الإنتاج
لقد فات الأوان. سجل جيت لا يزال يظهر هذا المفتاح في البداية commit.
المفاهيم الخاطئة حول git stash وgit rebase
يفترض العديد من المطورين بوابة المخبأ يساعد على إخفاء الأسرار أو كشفها. غير صحيح. بوابة المخبأ رفوف فقط عمل اخراجي يتغير مؤقتًا؛ لا يلمس أبدًا commit التاريخ. إذا كان هناك سر على الإطلاق commitإن تخزين التغييرات بعد ذلك لا يؤدي إلى تنظيفها.
ماذا عن جيت rebase؟ في حين أنه يمكن إعادة كتابة التاريخ، إلا أنه يجب القيام بذلك مسبقًاcisإيلي. مجرد الجري git rebase -i وإعادة الترتيب أو السحق commitلا يزيل s الأسرار إلا إذا عدّلتها أو حذفتها صراحةً. وحتى لو وُجدت نسخة أو فرع واحد مع الأصل، commitس، سرك لا يزال حيًا.
والأسوأ من ذلك أن إعادة التأسيس دون فرض الضغط بشكل صحيح أو إعادة التنسيق مع المتعاونين قد يؤدي إلى إعادة تقديم بيانات الاعتماد المكشوفة عبر عمليات الدمج.
⚠️ مثال تعليمي، لا تستخدمه في البيئات الحقيقية
⚠️ مثال تعليمي، لا يتم التشغيل على مستودعات الإنتاج
تحرير commit يحتوي على السر، ولكن ينسى إزالته. إن سجل جيت ربما بحث أصبحت البيانات أكثر نظافة، ولكن لا يزال من الممكن استرداد المحتوى الحساس.
المخاطر الحقيقية الناجمة عن نسيان بيانات الاعتماد في سجل Git
هذا ليس نظريًا. يقوم المهاجمون بفحص المستودعات العامة والخاصة بنشاط بحثًا عن أسرار مخفية commit تواريخ. شوك GitHub، ومستودعات النسخ، والمحفوظات المؤقتة CI/CD pipelineيمكن أن تحتوي جميعها على تلك الرموز المنسية.
- مفتاح API مسرب من قديم سجل جيت أدى ذلك إلى دفع آلاف الدولارات في الفواتير السحابية لشركة ناشئة واحدة.
- رموز OAuth commitتم استخدام الملفات التي تم حذفها بعد ذلك لاختطاف حسابات المستخدمين.
- تسببت الأسرار المدفونة عميقًا في فروع مشاريع مفتوحة المصدر في وقوع حوادث أمنية كبرى.
هذه المشاكل تتوسع CI/CD. يتم تشغيل كل وظيفة تستنسخ مستودعًا سجل جيت تحت الغطاء، وكل قطعة أثرية يمكن أن تتضمن آثارًا لأسرار مكشوفة.
تنظيف البيانات الحساسة باستخدام git filter-repo
إذا حدث الضرر، فإن الأداة الأكثر موثوقية لتنظيفه هي بوابة تصفية الريبو. مختلف جيت rebase، الذي يعيد كتابة فرد commits, بوابة تصفية الريبو يمكن إعادة كتابة النص بأكمله commit التاريخ بناءً على مسارات الملفات أو الأنماط أو المحتوى.
مثال: لمسح جميع حالات التكوين.json التي قد تحتوي على أسرار:
⚠️ مثال تعليمي، التحقق في مستودع اختبار قبل الاستخدام في الإنتاج
أو لإزالة الكل commits التي تتضمن سلسلة محددة (على سبيل المثال، AWS_SECRET_ACCESS_KEY):
⚠️ مثال تعليمي، التحقق في مستودع اختبار قبل الاستخدام في الإنتاج
كن حذرا: هذا سوف يعيد الكتابة commit التجزئات. ستحتاج إلى فرض الدفع وإبلاغ جميع المتعاونين. أي مفاتيح أتمتة أو نشر مرتبطة بـ commit سوف تنكسر التجزئات.
أيضا ، أدوات مثل منظف BFG الريبو تقدم التقنيات الحديثة قدرات مماثلة ولكنها أقل مرونة وتعتبر الآن قديمة بالنسبة للحالات المعقدة.
منع تسريبات الأسرار قبل وصولها إلى Git
الوقاية خير من التنظيف. إليك كيفية منع الأسرار من الظهور سجل جيت:
1. Pre-commit Hooks
استخدام أدوات مثل pre-commit, جيتليكس أو طلسم للبحث عن الأسرار قبل commits:
2. CI/CD Pipeline تطبيق
دمج الكشف السري في مهام التكامل المستمر لديك. فشل في البناء عند اكتشاف الأسرار. اجعل هذا سياسة.
3. إدارة الأسرار
لا تُرسِم بيانات الاعتماد بشكل ثابت. استخدم متغيرات البيئة، أو الخزائن، أو مديري الأسرار منذ البداية.
4. اعتماديات التدقيق
لا تثق في حزم الطرف الثالث بشكل أعمى. الأسرار يمكن أن تتسرب من خلال طبقات npm، أو PyPI، أو Docker.
الإصلاح النهائي: تنظيف الأسرار باستخدام git filter-repo
إن حذف الأسرار من الكود ليس كافيًا. سجل جيت لا تحتفظ بسجل كامل إلا إذا اتخذت إجراءً متعمدًا لإعادة كتابة التاريخ. لا تعتمد على بوابة المخبأ أو نصف مخبوزة جيت rebase محاولات. استخدم بوابة تصفية الريبو عندما تحتاج إلى تنظيف عميق، وفرض السياسات والفحص قبل وصول الأسرار إلى مستودعك في المقام الأول.
للكشف الاستباقي عن الأسرار، ضع في اعتبارك استخدام أدوات مثل زيجيني لتأمين الخاص بك pipelineس، فرض commit النظافة، ومنع التسريبات المكلفة قبل ظهورها. جيت لا ينسى أبدًا، ولكن يمكنك التأكد من أنه لن يتذكر أسرارك أبدًا.





