0Pricing
React Academy · درس

إدارة الأسرار ومتغيرات البيئة

ميّز بين متغيرات البيئة على الخادم والعميل، وامنع تسرّب الأسرار إلى الحزم، واستخدم الحقن وقت التشغيل

إدارة الأسرار ومتغيرات البيئة درس مجاني في React Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

فئتان من متغيرات البيئة

تنقسم متغيرات البيئة في تطبيق React إلى فئتين: متغيرات من جانب الخادم (لا تُرسل مطلقًا إلى المتصفح) ومتغيرات من جانب العميل (تُضمّن في حزمة JavaScript). إن فهم الفئة التي تنتمي إليها متغيراتك هو الخطوة الأولى في إدارة الأسرار، لأن متغيرات جانب العميل تصبح عامة فعليًا بمجرد نشر الحزمة.

اصطلاح البادئة في Vite

في مشاريع Vite، لا تُضمّن في حزمة العميل إلا المتغيرات التي تبدأ بالبادئة VITE_. ويمكن الوصول إلى VITE_PUBLIC_API_URL=https://api.example.com في شيفرة المتصفح عبر import.meta.env.VITE_PUBLIC_API_URL. أما جميع المتغيرات الأخرى فتُزال من الحزمة وقت البناء وتظل مقتصرة على الخادم.

اصطلاح البادئة في Next.js

في Next.js، تكشف البادئة NEXT_PUBLIC_ المتغير لشفرة JavaScript في المتصفح. ويُضمّن NEXT_PUBLIC_ANALYTICS_ID=UA-123 في حزمة العميل. أما المتغيرات التي لا تحمل هذه البادئة (مثل DATABASE_URL) فلا يمكن الوصول إليها إلا في الشيفرة من جانب الخادم (مكونات الخادم ومسارات API وإجراءات الخادم)، ولا تُرسل مطلقًا إلى المتصفح.

خطر الكشف غير المقصود

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

لا تضع هذه القيم مطلقًا في شيفرة العميل

يجب ألا تظهر العناصر التالية مطلقًا في حزمة العميل: سلاسل اتصال قواعد البيانات وكلمات المرور، ومفاتيح API السرية التابعة لجهات خارجية (مفتاح Stripe السري ومفتاح OpenAI API)، ومفاتيح RSA/EC الخاصة، وأسرار توقيع JWT، ورموز مصادقة الخدمات الداخلية. إذا احتجت إلى أي منها لإجراء استدعاء API، فمرّر ذلك الاستدعاء عبر وكيل في نقطة نهاية على الخادم.

نمط Backend for Frontend

يضع نمط Backend for Frontend (BFF) طبقة خادم رقيقة بين تطبيق React والخدمات الخارجية الحساسة. يستدعي العميل /api/stripe/charge، فيضيف خادم BFF مفتاح Stripe السري ويستدعي Stripe API، ثم يعيد BFF بيانات الاستجابة الضرورية فقط. وتبقى الأسرار على الخادم بشكل دائم.

dotenv-vault وتخزين الأسرار المُدار

يشفّر dotenv-vault ملف .env ويسمح بمشاركته ونشره بأمان عبر البيئات المختلفة، من دون إيداع الأسرار بنص واضح في نظام التحكم في الإصدارات. وتشمل البدائل المخصصة للإنتاج HashiCorp Vault (للمؤسسات) وAWS Parameter Store (SSM) وGCP Secret Manager؛ إذ توفر جميعها استرداد الأسرار عبر API وقت التشغيل بدلًا من وقت البناء.

الأسرار في مسارات CI/CD

توفر منصات CI/CD (مثل GitHub Actions وGitLab CI) تخزينًا مشفّرًا للأسرار يمكن الوصول إليه كمتغيرات بيئة أثناء عمليات البناء. خزّن الأسرار في GitHub Secrets، وأشر إليها في مسارات العمل باستخدام ${{ secrets.STRIPE_SECRET_KEY }}. تُخفى الأسرار في السجلات ولا تُضمّن مطلقًا في الأثر البرمجي الناتج عن البناء.

ملفات التهيئة الخاصة بالبيئة

يدعم Next.js وVite عدة ملفات .env: .env (جميع البيئات)، و.env.local (تجاوزات محلية، مستثناة من Git)، و.env.development، و.env.production. يتجاوز الملف المحلي القيم الواردة من الملف المشترك، مما يتيح تهيئة خاصة بكل مطوّر دون التأثير في البيئات الأخرى.

تدقيق الحزم بحثًا عن الأسرار

بعد البناء، دقّق في حزمة JavaScript بحثًا عن الأسرار التي كُشف عنها عن طريق الخطأ. شغّل grep -r "password|secret|api_key" dist/ أو استخدم أداة مخصصة مثل تحليل strings على الملفات الناتجة عن البناء. ويمكن التعرّف بوضوح إلى بعض الأسرار، إذا أُدرجت عن طريق الخطأ، من خلال تنسيقها (مثل UUID أو سلاسل base64 أو بادئات المفاتيح مثل sk_live_).

مبدأ الحد الأدنى من الكشف

يجب ألا يملك كلٌّ من كل بيئة وكل خدمة وصولًا إلا إلى الأسرار التي تحتاج إليها. لا يحتاج عميل React إلى أي أسرار على الإطلاق؛ بل ينبغي أن يتلقى المعرّفات العامة فقط. ولا يحتاج خادم BFF إلا إلى الأسرار المطلوبة لواجهات API التي يستدعيها. وينبغي أن تستخدم بيئات التطوير مفاتيح API غير مخصصة للإنتاج، ذات صلاحيات محدودة وحدود قصوى للإنفاق.

بادئة NEXT_PUBLIC_

ماذا يحدث لمتغير بيئة في Next.js يحمل البادئة NEXT_PUBLIC_؟

مراجعة الدرس

يستخدم Vite البادئة VITE_ ويستخدم Next.js البادئة NEXT_PUBLIC_ لكشف المتغيرات لحزمة المتصفح. أما جميع المتغيرات الأخرى فمقتصرة على جانب الخادم. لا تُضمّن كلمات مرور قواعد البيانات أو مفاتيح API السرية أو أسرار توقيع JWT في شيفرة العميل مطلقًا. استخدم نمط BFF لتمرير استدعاءات API الحساسة عبر وكيل. واستخدم dotenv-vault أو AWS Parameter Store أو GitHub Secrets لإدارة أسرار الإنتاج. ودقّق في الحزم الناتجة عن البناء بحثًا عن الأسرار التي كُشف عنها عن طريق الخطأ.

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

هل درس «إدارة الأسرار ومتغيرات البيئة» مجاني؟

نعم — نص درس «إدارة الأسرار ومتغيرات البيئة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «إدارة الأسرار ومتغيرات البيئة»؟

ميّز بين متغيرات البيئة على الخادم والعميل، وامنع تسرّب الأسرار إلى الحزم، واستخدم الحقن وقت التشغيل تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إدارة الأسرار ومتغيرات البيئة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. هجمات XSS في React: dangerouslySetInnerHTML والبرامج النصية التابعة لجهات خارجية
  2. الحماية من CSRF في React وإعدادات API
  3. سياسة أمان المحتوى لتطبيقات React
  4. إدارة الأسرار ومتغيرات البيئة
← العودة إلى React Academy