كيفية إدارة مفاتيح API والأسرار في الكود بأمان

Security2026-09-15TryQuickToolBox

تقوم بعمل commit للكود، تدفعه إلى GitHub، وتنتقل إلى مهمة أخرى. بعد أيام تكتشف أن مفتاح API الخاص بك تم استخراجه من مستودع عام واستُخدم لتكديس آلاف الدولارات في فواتير السحابة. هذه ليست حالة نادرة؛ بل هي واحدة من أكثر أخطاء الأمان شيوعًا وتكلفة في التطوير الحديث. الأسرار المضمنة في الكود المصدري هي هدية للمهاجمين، ومن السهل تجنبها بشكل مدهش.

لماذا الأسرار المضمنة خطيرة للغاية

عندما تدمج مفتاح API أو كلمة مرور قاعدة بيانات أو رمزًا خاصًا مباشرة في الكود، تفقد السيطرة على من يمكنه رؤيته. الكود المصدري ينتقل: يتم استنساخه، تفريعه، نسخه إلى صور Docker، لصقه في تطبيقات الدردشة، وأحيانًا نشره عن طريق الخطأ. بمجرد دخول سر إلى نظام التحكم في الإصدارات، يبقى للأبد في تاريخ Git، حتى لو حذفته في commit لاحق.

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

القاعدة رقم 1: لا تضمّن الأسرار أبدًا

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

بدلاً من ذلك، يجب أن يقرأ الكود الأسرار من البيئة في وقت التشغيل. إليك مثال بسيط في Python:

import os

api_key = os.environ.get("PAYMENT_API_KEY")
if not api_key:
    raise RuntimeError("PAYMENT_API_KEY is not set")

في Node.js، ستستخدم process.env.PAYMENT_API_KEY. في Go، os.Getenv("PAYMENT_API_KEY"). النمط عالمي: يتوقع الكود توفير السر من الخارج.

استخدام متغيرات البيئة بأمان

متغيرات البيئة تحسين كبير، لكنها ليست حلاً سحريًا. يمكن أن تتسرب من خلال تقارير الأخطاء أو سجلات التصحيح أو قوائم العمليات. اتبع هذه الممارسات:

للتطوير المحلي، مكتبات مثل python-dotenv أو dotenv لـ Node.js تسهل تحميل ملف .env دون تضمين أي شيء. فقط تذكر: يجب عدم عمل commit لهذا الملف أبدًا.

مديرو الأسرار المركزيون للإنتاج

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

تشمل الخيارات الشائعة:

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

الأسرار في خطوط أنابيب CI/CD

تحتاج خطوط أنابيب البناء والنشر أيضًا إلى أسرار، مثل كلمات مرور السجل أو رموز النشر. توفر معظم أنظمة CI (GitHub Actions، GitLab CI، CircleCI) تخزينًا مشفرًا للأسرار. استخدم هذه الميزات بدلاً من وضع الأسرار في ملفات تكوين خط الأنابيب.

على سبيل المثال، في GitHub Actions تحدد الأسرار في إعدادات المستودع وتشير إليها هكذا:

steps:
  - name: Deploy
    run: ./deploy.sh
    env:
      API_TOKEN: ${{ secrets.DEPLOY_API_TOKEN }}

كن حذرًا مع طلبات السحب من الشوكات (forks): لا يتم تمرير الأسرار إلى سير العمل الذي تطلقه طلبات السحب من الشوكات افتراضيًا، وهذا جيد. لا تطبع الأسرار في السجلات أبدًا؛ قم بإخفائها إذا كان نظام CI الخاص بك يدعم ذلك.

قم بتدوير الأسرار بانتظام

حتى مع التخزين المثالي، يمكن أن تتسرب الأسرار من خلال قنوات أخرى: حاسوب محمول مخترق، خدمة تسجيل غير مهيأة بشكل صحيح، أو موظف مغادر. يحد التدوير من نافذة التعرض.

ضع جدول تدوير بناءً على الحساسية. قد يتم تدوير المفاتيح عالية القيمة (بوابات الدفع، واجهات API الإدارية) كل 30-90 يومًا. يمكن تدوير المفاتيح منخفضة المخاطر بشكل أقل تكرارًا. أتمت التدوير حيثما أمكن: يمكن لـ AWS Secrets Manager و Vault تدوير بيانات اعتماد قاعدة البيانات تلقائيًا.

عند التدوير، تأكد من أن تطبيقك يمكنه التعامل مع أسرار صالحة متعددة أثناء الانتقال. النمط الشائع هو قبول كل من السر القديم والجديد لفترة قصيرة، ثم إلغاء تنشيط القديم.

كشف ومنع التسريبات

الوقاية خير من العلاج، لكن الكشف هو شبكة الأمان الخاصة بك. استخدم خطافات pre-commit لفحص الأسرار قبل عمل commit لها. أدوات مثل git-secrets أو trufflehog أو gitleaks يمكنها اكتشاف الـ commits العرضية.

قم أيضًا بتمكين فحص الأسرار على منصة استضافة Git الخاصة بك (GitHub و GitLab و Bitbucket جميعها تقدم هذا). إذا تسرب سر، قم بإلغائه فورًا وقم بتدويره. حذف الـ commit لا يكفي؛ افترض أن السر قد تم اختراقه بمجرد وصوله إلى مستودع بعيد.

مقارنة طرق تخزين الأسرار

الطريقة الأفضل لـ المخاطر
متغيرات البيئة التطبيقات الصغيرة، التطوير المحلي التسرب عبر السجلات، فحص العمليات
ملفات .env التطوير المحلي commit عرضي، لا يوجد تشفير
مديرو الأسرار الإنتاج، الفرق التعقيد، تبعية إضافية
مخازن أسرار CI/CD خطوط أنابيب البناء والنشر محدودة بنطاق خط الأنابيب

الأسئلة الشائعة

هل يمكنني تخزين الأسرار في مستودع خاص؟

لا. لا تزال المستودعات الخاصة لديها العديد من المستخدمين والتكاملات مع صلاحية القراءة. يمكن أن تتسرب الأسرار من خلال الشوكات أو سجلات CI أو حساب مخترق. استخدم دائمًا متغيرات البيئة أو مدير أسرار، حتى للكود الخاص.

ماذا يجب أن أفعل إذا قمت بعمل commit لسر عن طريق الخطأ؟

قم بإلغاء وتدوير السر فورًا. مجرد حذف الـ commit أو إعادة كتابة التاريخ لا يكفي لأن السر قد يكون مخزنًا مؤقتًا أو مستنسخًا بالفعل. تعامل معه على أنه مخترق واستبدله.

هل متغيرات البيئة آمنة بما يكفي للإنتاج؟

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

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