كل المقالات

دفعت مفتاح واجهة برمجية إلى المستودع: أول عشر دقائق بالترتيب الصحيح

الأمان · 4 دقيقة قراءة ·

أول ما تفعله بعد أن ترى مفتاحك مكشوفًا في مستودع على ⁨GitHub⁩ ليس حذف الالتزام، بل فتح لوحة المزوّد وإلغاء المفتاح. الرغبة الطبيعية هي إزالة الالتزام ودفع نسخة معدّلة بالقوة قبل أن يلاحظ أحد، لكن المفتاح يُعتبر مخترقًا منذ لحظة الدفع، ولا شيء تفعله داخل ⁨git⁩ يغيّر ذلك.

لماذا لا يكفي حذف الالتزام

كل عملية دفع تنسخ سجلّك إلى أماكن لا تملكها. من استنسخ المستودع أو تفرّع عنه يملك الالتزام. وهناك برامج آلية تراقب الدفعات العامة بحثًا عن أي نص يشبه مفتاحًا، وهي سريعة. كما قد تحتفظ ذاكرات التخزين المؤقت والمرايا بنسخة حتى بعد أن تعيد كتابة فرعك. حذف الالتزام ينظّف نسخة واحدة هي نسختك، ويترك المفتاح صالحًا في كل مكان آخر. الإجراء الوحيد الذي يُبطل كل النسخ دفعة واحدة هو إلغاء المفتاح.

التزام فيه المفتاح، مدفوع تفرّعات ونسخ برامج جمع المفاتيح ذاكرات ومرايا فرعك أنت حذف الالتزام: تختفي هذه النسخة فقط
إعادة كتابة السجل تصل إلى نسخة واحدة من أربع. إلغاء المفتاح يجعل الأربع بلا قيمة.

الترتيب الذي يحدّ من الضرر

هذه إرشادات عامة وليست قاعدة من مزوّد بعينه، والترتيب هنا أهم من سرعة أي خطوة منفردة.

أولًا، ألغِ المفتاح أو استبدله عند المزوّد. أنشئ مفتاحًا جديدًا، ضعه في بيئة التشغيل، ثم احذف القديم. قبل هذه الخطوة كل ما عداها تجميل.

ثانيًا، راجع لوحة الاستخدام والفوترة بحثًا عن طلبات لا تعرفها منذ لحظة الدفع. إن وجدت شيئًا، فأنت الآن أمام حادثة يجب الإبلاغ عنها، لا مجرد خطأ تنظّفه.

ثالثًا، أخرج السر من الكود. في ⁨Laravel⁩ مكان المفتاح هو ملف ⁨.env⁩، يُقرأ داخل ملف إعدادات، ويقرؤه الكود عبر ⁨config()⁩:

// config/services.php
'anthropic' => ['key' => env('ANTHROPIC_API_KEY')],

// anywhere in the app
$key = config('services.anthropic.key');

لا تستدعِ ⁨env()⁩ خارج ملفات الإعدادات. بعد تشغيل ⁨php artisan config:cache⁩، وهو ما تفعله أغلب عمليات النشر، تعيد ⁨env()⁩ القيمة ⁨null⁩ خارجها، فينتهي الأمر بمن يقرأ المفتاح مباشرة داخل متحكم إلى كتابته في الكود "مؤقتًا". تأكد أن ⁨.env⁩ مدرج في ⁨.gitignore⁩، واحتفظ بملف ⁨.env.example⁩ بقيم وهمية حتى لا يحتاج أحد الملف الحقيقي لتشغيل التطبيق.

رابعًا، وبعد ذلك فقط إن أردت، نظّف السجل باستخدام ⁨git filter-repo⁩ أو ⁨BFG⁩. هذا ترتيب للبيت وليس إصلاحًا: يحتاج دفعًا بالقوة وأن يعيد كل فرد في الفريق استنساخ المستودع، ولا يفعل شيئًا للنسخ في الرسم الأول.

خامسًا، امنع التسريب القادم. فعّل فحص الأسرار وحماية الدفع، أضف فاحصًا قبل كل التزام، وأعطِ كل بيئة مفتاحًا خاصًا محدود الصلاحيات بسقف إنفاق، حتى يكون التسريب القادم صغيرًا. ثم دوّن ما حدث ما دمت تتذكره.

1. ألغِ المفتاح 2. راجع الاستخدام 3. انقله إلى ملف البيئة 4. نظّف السجل 5. فعّل حماية الدفع الدقيقة الأولى اختياري، ولا يأتي أولًا الخطوات من 2 إلى 5 لا قيمة لها قبل الخطوة 1
ألغِ قبل أن تنظّف. إعادة كتابة السجل هي الخطوة الرابعة لا الأولى.
المفتاح المسرّب يُصلَح عند المزوّد لا داخل ⁨git⁩. ألغِه أولًا، وكل ما بعد ذلك تنظيف.

ما الذي يفعله ⁨GitHub⁩ لك الآن

أعلنت ⁨GitHub⁩ يوم 2026-10-13 أن فحص الأسرار صار يكتشف أنواعًا جديدة من ⁨Salesforce⁩ و⁨Anthropic⁩ و⁨Cloudsmith⁩، وأن نوعي مفاتيح ⁨Anthropic⁩ الجديدين، ⁨anthropic_service_api_key⁩ و⁨anthropic_user_api_key⁩، تحجبهما حماية الدفع افتراضيًا. وبحسب ⁨GitHub⁩، فإن المستودعات المفعّل فيها فحص الأسرار، ومنها المستودعات العامة المجانية، تُحجب فيها تلقائيًا الالتزامات التي تحتوي هذه المفاتيح. وتقول ⁨GitHub⁩ أيضًا إن أسرار الشركاء التي تظهر في مستودعات عامة تُرسل إلى الجهة المُصدِرة لتلغيها قبل إساءة استخدامها، وإن أسرار المستخدمين تُطلق تنبيهات في المستودعات العامة والخاصة. هذه شبكة أمان تستحق التفعيل، لكنها تغطي الأنواع التي تعرفها ⁨GitHub⁩ فقط، فيبقى الترتيب أعلاه مسؤوليتك حين يفلت شيء. إن لم تفعّل فحص الأسرار في مستودعاتك بعد، ففعّله اليوم، ثم أضف فاحصًا قبل الالتزام حتى لا يغادر المفتاح جهازك أصلًا.

المصدر: سجل تغييرات ⁨GitHub⁩، 2026-10-13.

ملاحظات القراء

  1. مفيش تعليقات لسه. الأول دايمًا الأجرأ.
بتبني حاجة زي كده؟ أقدر أساعدك. راسلني على واتساب