قام كل مطور في وقت واحد بربط ملفات بمعلومات سرية إلى المستودع العام عن طريق الخطأ. كيف تتعامل مع مثل هذه المشكلة؟ كيف تتأكد من عدم حدوث شيء مثل هذا مرة أخرى؟
في هذه المقالة ، سأخبرك بما يجب عليك فعله إذا دخل ملف بطريق الخطأ إلى المستودع الذي ليس لديه ما يفعله هناك على الإطلاق. سأقدم هنا أوامر Git التي ستسمح لك بتصحيح السجل ومشاركة بعض التوصيات لتنظيم العمل الآمن بمعلومات سرية.

إزالة الملفات الحساسة من مستودع Git ( صورة كبيرة )
تقليل الضرر
لذلك ، ارتكبت عن طريق الخطأ ملفًا يحتوي على معلومات سرية. دعنا نسمي هذا الملف
.env. بعد حدوث ذلك مباشرة ، عليك أن تسأل نفسك بضعة أسئلة:
- هل تم دفع الالتزام إلى المستودع البعيد؟
- هل يمكن الوصول إلى المستودع البعيد للجمهور؟
لم يتم إرسال Commit إلى المستودع البعيد
إذا لم تكن قد أرسلت التزامًا إلى المستودع بعد ، فعندئذٍ ، بشكل عام ، لا يشكل الموقف الذي نشأ أي تهديد. لإصلاح كل شيء ، ما عليك سوى الرجوع إلى الالتزام السابق:
git reset HEAD^ --soft
ستبقى الملفات في نسخة العمل من المستودع ، يمكنك إجراء التغييرات اللازمة على المشروع.
إذا كنت تريد الاحتفاظ بالالتزام وتحتاج فقط إلى إزالة ملفات معينة منه ، فقم بما يلي:
git rm .env --cached
git commit --amend
--amendيمكن استخدام
هذه المعلمة فقط للعمل مع الالتزام الأحدث. إذا أضفت القليل بعد فشل الالتزام ، فاستخدم هذا الأمر:
git rebase -i HEAD~{ ?}
سيؤدي هذا إلى إصلاح الالتزام الخاطئ وسيساعدك على عدم فقدان التغييرات التي تم إجراؤها على المشروع من خلال الالتزامات الأخرى.
تم إرسال ▍Commit إلى المستودع البعيد
إذا كنت قد دفعت بالفعل التزامًا إلى مستودع بعيد ، فأنت بحاجة أولاً وقبل كل شيء إلى معرفة الفرق بين المستودعات العامة والخاصة.
إذا كان المستودع الخاص بك خاصًا ولا يمكن الوصول إليه من قبل برامج الروبوت أو الأشخاص الذين لا تثق بهم ، فيمكنك ببساطة تعديل الالتزام الأخير باستخدام أمرين أعلاه.
إذا كنت قد دفعت التزامات أخرى إلى المستودع بعد تنفيذ إشكالي ، فلن يمنعك ذلك من إزالة الملفات الحساسة من سجل Git باستخدام الأمر git filter-Branch أو أداة BFG Repo-Cleaner .
إليك مثال على الاستخدام
git filter-branch:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .env" --prune-empty --tag-name-filter cat -- --all
ولكن عند القيام بذلك ، ضع في اعتبارك جانبين مهمين من هذه التغييرات التي تم إجراؤها على المستودع:
- Git. , - , , PR, . .
- . , , . , , , , . , ID, , .
هل أحتاج إلى إنشاء مفاتيح سرية جديدة إذا كانت إصداراتها الحالية موجودة في المستودع العام؟
إذا أجبت بإيجاز على السؤال في العنوان ، فهذا ضروري. إذا كان المستودع الخاص بك متاحًا للجمهور ، أو إذا كنت تعتقد ، لأي سبب كان ، أنه ليس مكانًا لتخزين البيانات الحساسة ، فستحتاج إلى اعتبار البيانات السرية التي تم إدخالها فيه على أنها مخترقة.
حتى إذا قمت بإزالة هذه البيانات من المستودع ، فلا يمكنك فعل أي شيء باستخدام الروبوتات وشوكات المستودع. كيفية المضي قدما؟
- قم بإلغاء تنشيط جميع المفاتيح أو كلمات المرور. يجب القيام بذلك أولا. بعد إلغاء تنشيط المفاتيح ، تصبح المعلومات السرية التي تم نشرها للعامة عديمة الفائدة.
- تخصيص الملف
.gitignore. أخذ في.gitignoreسجلات الملفات ذات المعلومات الحساسة إلى Git لن يراقب حالة هذه الملفات. - قم بإعداد التزام لا يحتوي على ملفات حساسة.
- أرسل التغييرات إلى المستودع ، وقدم الالتزام بتوضيحات حول الموقف. لا تحاول إخفاء الخطأ. سيقدر جميع المبرمجين الذين يعملون في المشروع ، بمن فيهم أنت ، وجود التزام في المستودع مع شرح للموقف ووصف لما تم إصلاحه بالضبط مع هذا الالتزام.
أفضل الممارسات للاحتفاظ بالملفات الحساسة في المشاريع التي تستخدم Git للتحكم في الإصدار
من أجل منع تسرب المعلومات السرية ، يجب عليك الالتزام بالتوصيات التالية.
▍ تخزين البيانات الحساسة في ملف .env (أو ملف آخر مشابه)
احتفظ بمفاتيح API والمعلومات المماثلة في ملف واحد
.env. باستخدام هذا الأسلوب ، إذا لم يتتبع Git حالة الملف .env، عن طريق إضافة مفتاح جديد إلى هذا الملف ، فلن تدفعه عن طريق الخطأ إلى المستودع.
ميزة أخرى لهذا النهج هي أنه بهذه الطريقة سيكون لديك وصول إلى جميع المفاتيح من خلال متغير عالمي
process.
▍ استخدم مفاتيح API إن أمكن
من السهل إلغاء تنشيط مفاتيح واجهة برمجة التطبيقات المخترقة وإعادة إنشائها بسهولة. إذا أمكن - استخدمها ، وليس شيئًا مثل تسجيلات الدخول وكلمات المرور.
▍ تخزين مفاتيح API باستخدام أداة البناء الخاصة بك
عادة ما تكون هناك حاجة إلى مفاتيح API عند إنشاء التطبيقات. تتيح لك أدوات الإنشاء مثل Netlify الاحتفاظ بالمفاتيح في خزائن آمنة. يتم إدخال هذه المفاتيح تلقائيًا في التطبيق باستخدام متغير عام
process.

إدارة متغيرات البيئة
▍إضافة إدخال ملف .env إلى ملف .gitignore
منع Git من تتبع الملفات الحساسة.
قم بإعداد ملف قالب env.template
يساعد وجود مثل هذا الملف النموذجي أولئك الذين يعملون في المشروع على إضافة مفاتيح API للمشروع ، مما يلغي الحاجة إلى قراءة الوثائق.
▍ لا تغير محفوظات Git في المستودعات البعيدة
حاول التمسك بهذه القاعدة بدقة. إذا اتبعت الإرشادات أعلاه ، فلن تحتاج إلى تغيير سجل Git الخاص بك.
النتيجة
آمل أن تساعدك المواد الخاصة بي على العمل بأمان مع البيانات السرية.
هل سبق لك أن قدمت شيئًا إلى مستودع عام لا ينبغي أن يذهب إلى هناك؟
