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