طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 243 · أمن الويب
الدرس 26 · الوحدة 11: إدارة الجلسات والمفاتيح

تخزين الأسرار والمفاتيح وتدويرها

أين تعيش مفاتيحك، ولماذا حذف السرّ المسرَّب لا يكفي؟ ⏱ نحو 35 دقيقة.

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

١السرّ لا يعيش في الكود

كل ما سبق من تشفير وتوقيع يقوم على أسرار: مفاتيح، وكلمات مرور قواعد البيانات، ورموز واجهات برمجية. إن كشف المهاجم السرّ، سقطت الحماية كلها. وأكثر تسريبات الأسرار سببها بسيط: وضعها في الكود.

الخطألماذا خطر
سرّ مكتوب في الكوديظهر لكل من يرى المستودع
سرّ في مستودع Gitيبقى في التاريخ حتى بعد حذفه
سرّ في كود الواجهةيصل إليه كل مستخدم (افتح أدوات المطوّر)
سرّ في السجلّاتيُكشف مع كل من يقرأ السجل

٢أين توضع الأسرار؟

المكانملاءمته
متغيّرات البيئةالحدّ الأدنى: خارج الكود، تُحقن وقت التشغيل
ملف .env غير مرفوعللتطوير، مع إضافته إلى .gitignore
خزنة أسرار (Vault)الأفضل للإنتاج: تخزين مشفّر، وصول مُدقَّق، تدوير
خدمة أسرار سحابيةمُدارة: KMS / Secrets Manager
// ✗ سرّ في الكودconst SECRET = 'my-real-secret-123'; // ✓ من متغيّر البيئة، يُحقن وقت التشغيلconst SECRET = process.env.JWT_SECRET;if (!SECRET) throw new Error('JWT_SECRET غير مضبوط');

المبدأ: افصل الإعداد (بما فيه الأسرار) عن الكود. الكود يُنشَر علنًا، والأسرار تُحقن في البيئة الآمنة.

٣تدوير المفاتيح وأقل صلاحية

حتى السرّ غير المكشوف يُدوَّر دوريًّا، كي لا يبقى مفتاح واحد صالحًا للأبد، فيقلّ أثر أي تسريب غير مكتشف:

المفتاح الحالي

توليد مفتاح جديد

الجديد نشط

القديم مقبول مؤقتًا للتحقق

إبطال القديم

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

هذه امتدادٌ لمبدأ أقل الصلاحيات (الدرس 6) على المفاتيح نفسها: كل مفتاح يملك أدنى صلاحية ولأقصر مدة.

توقّع وتحقّق

أين لا يوضع السرّ أبدًا؟

سرّ رُفع إلى مستودع عام:

تدوير المفاتيح يعني:

أفضل مكان لأسرار الإنتاج:

الخلاصة

تحدٍّ تصميمي: خطة إدارة أسرار «رفيق»

متوسط

يملك متجر «رفيق» أسرارًا: كلمة مرور قاعدة البيانات، ومفتاح توقيع JWT، ومفتاح واجهة بوابة الدفع. ضع خطة إدارتها بملء الحقول.

المطلوب:
  • أين تُخزَّن هذه الأسرار بدل الكود (مكانان على الأقل).
  • ماذا تفعل إن تسرّب أحدها إلى مستودع عام.
  • ممارستان لتقليل أثر تسريب غير مكتشف (سطر لكل).
✓ التحقق الآلي: يفحص المختبر بنية مستندك وصياغته (لا يحكم على جودة الفكرة؛ هذا دور معلمك)
  • مكانان للتخزين
  • متغيّرات البيئة أو خزنة
  • عند التسرّب: الإبطال
  • ممارستان
  • تدوير أو أقل صلاحية

💡 تلميح 1
خزّن الأسرار في متغيّرات البيئة أو خزنة أسرار، لا في الكود.
💡 تلميح 2
السرّ المسرَّب يُبطَل ويُستبدل فورًا، لا يُكتفى بحذفه.
💡 تلميح 3
قلّل الأثر: تدوير دوري، وأقل صلاحية، ومفتاح لكل بيئة.

نموذج واحد من إجابات كثيرة صحيحة.

أين تُخزَّن الأسرار (مكانان)
متغيّرات البيئة تُحقن وقت التشغيل، خارج الكود.
خزنة أسرار مُدارة (Vault/KMS) للإنتاج، بتخزين مشفّر ووصول مُدقَّق.
عند تسرّب سرّ إلى مستودع عام
أعتبره مكشوفًا فورًا، فأبطله وأولّد سرًّا جديدًا، ولا أكتفي بحذفه من التاريخ.
ممارستان لتقليل الأثر (سطر لكل)
تدوير المفاتيح دوريًّا فلا يبقى مفتاح صالحًا للأبد.
منح كل مفتاح أقل صلاحية ولكل بيئة مفتاحها، فيقلّ ما يكشفه التسريب.
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس