0Pricing
React Academy · درس

سياسة أمان المحتوى لتطبيقات React

اضبط ترويسة CSP صارمة تمنع البرامج النصية المضمّنة والموارد الخارجية غير المصرّح بها في تطبيقات React

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

ما هي سياسة أمان المحتوى

سياسة أمان المحتوى (CSP) هي ترويسة HTTP تُخبر المتصفح بمصادر المحتوى الموثوقة. ومن خلال التصريح بدقة عن البرامج النصية والأنماط والصور والخطوط المسموح بتحميلها، تمنع CSP تنفيذ المحتوى الضار المحقون، حتى إذا أتاحت ثغرة XSS للمهاجم حقن HTML في الصفحة.

default-src وscript-src

تحدد default-src 'self' خط الأساس: لا يجوز تحميل جميع أنواع الموارد (البرامج النصية والأنماط والصور والخطوط والإطارات) إلا من الأصل نفسه. وتقيّد script-src 'self' تحميل البرامج النصية بالأصل نفسه، فتحظر البرامج النصية الواردة من شبكات CDN الخارجية ما لم تُدرج صراحةً. وتشكل هاتان التوجيهتان معًا أساس CSP المقيّدة.

أهمية حظر eval

تحوّل eval() سلسلة نصية إلى تعليمات برمجية قابلة للتنفيذ أثناء التشغيل، وهذا هو تحديدًا ما تحتاج إليه حمولات XSS. وتحظر CSP التي تستخدم script-src 'self' (من دون 'unsafe-eval') الدالة eval() والدوال المرتبطة بها مثل new Function() وsetTimeout(string). ويؤدي ذلك إلى إزالة فئة رئيسية من تنفيذ حمولات XSS.

strict-dynamic لسلاسل البرامج النصية

يمنح 'strict-dynamic' ضمن script-src الثقة للبرامج النصية التي تحمّلها برامج نصية موثوقة مسبقًا. ويتيح ذلك أنماط التحميل الديناميكي للبرامج النصية التي تستخدمها أدوات التجميع، من دون الحاجة إلى السماح بكل عنوان URL لشبكات CDN. ويمكن لبرنامج نصي موثوق تحميل برامج نصية إضافية، فتنتقل إليها الثقة.

CSP المستندة إلى التجزئة للبرامج النصية المضمنة

إذا كان تطبيقك يحتاج إلى برنامج نصي مضمن محدد (مثل مقطع تهيئة التحليلات)، يمكنك حساب تجزئته SHA-256 وإضافة 'sha256-base64hash' إلى script-src. لن يُسمح بالتنفيذ المضمن إلا للبرامج النصية المطابقة لتلك التجزئة بالضبط. وستختلف تجزئة أي برنامج نصي يحقنه مهاجم، لذلك سيُحظر.

CSP المستندة إلى nonce

إن nonce قيمة عشوائية مشفّرة يُنشئها الخادم لكل طلب. ويضيف الخادم nonce إلى كل من وسم البرنامج النصي (<script nonce="abc123">) وترويسة CSP (script-src 'nonce-abc123'). ولا تُنفّذ إلا البرامج النصية التي تحمل nonce الصحيح. ولا يستطيع المهاجمون توقّع nonce، لذا لا يمكن للبرامج النصية المحقونة استخدامه.

إعداد تقارير CSP

تدعم CSP إعداد تقارير الانتهاكات عبر report-uri /csp-violation-endpoint أو التوجيه الأحدث report-to. عندما يحظر المتصفح موردًا بسبب CSP، فإنه يرسل تقريرًا بصيغة JSON إلى نقطة النهاية. تساعد مراقبة هذه التقارير على تحديد مشكلات التهيئة المشروعة ومحاولات الهجوم النشطة.

تطبيق CSP في Next.js

في Next.js، أضف ترويسات CSP في الوسيط: أنشئ middleware.ts، وأنشئ nonce، واضبط ترويسة Content-Security-Policy، ومرّر nonce إلى الصفحة عبر ترويسة استجابة. يقرأ تخطيط الصفحة nonce من الترويسة ويطبّقه على جميع البرامج النصية المضمنة ووسوم الأنماط.

اختبار CSP دون حظر

يُعد Content-Security-Policy-Report-Only وضع الاختبار: لا يفرض المتصفح أي حظر، لكنه يرسل تقارير انتهاك لكل ما كان سيُحظر. انشر التطبيق أولًا في وضع Report-Only، وأصلح جميع الانتهاكات، ثم انتقل إلى ترويسة Content-Security-Policy التي تفرض السياسة لتجنب تعطيل التطبيق.

انتهاكات وحدة تحكم Chrome DevTools

عندما تحظر CSP موردًا، تعرض وحدة تحكم Chrome DevTools رسالة خطأ حمراء تحدد عنوان URL المحظور والتوجيه المنتهك. وتُعد هذه الرسائل بالغة القيمة أثناء التطوير والاختبار. يجب معالجة كل انتهاك إما بإصلاح السياسة، أو نقل المورد إلى مصدر مسموح به، أو استخدام nonce أو تجزئة.

CSP عملية لتطبيق React أحادي الصفحة

إعداد CSP عملي لتطبيق React أحادي الصفحة: default-src 'self'; script-src 'self' 'strict-dynamic' 'nonce-NONCE'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self' https://api.yourdomain.com; frame-ancestors 'none'. كما يمنع frame-ancestors 'none' هجمات النقر الخادع، وذلك بحظر تضمين تطبيقك في إطارات iframe.

script-src self في CSP

ما الذي يمنعه script-src 'self' في سياسة أمان المحتوى؟

مراجعة الدرس

CSP هي ترويسة HTTP تصرّح بمصادر المحتوى الموثوقة. تحظر default-src 'self' وscript-src 'self' البرامج النصية الخارجية وeval. ويمكن السماح بالبرامج النصية المضمنة باستخدام التجزئات أو nonce. ويدعم 'strict-dynamic' تحميل البرامج النصية ديناميكيًا. استخدم Content-Security-Policy-Report-Only للاختبار قبل فرض السياسة. يطبّق Next.js CSP عبر الوسيط. وتعرض وحدة تحكم DevTools الانتهاكات في الوقت الفعلي.

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

هل درس «سياسة أمان المحتوى لتطبيقات React» مجاني؟

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

ماذا ستتعلم في «سياسة أمان المحتوى لتطبيقات React»؟

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

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

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

كم من الوقت يستغرق درس «سياسة أمان المحتوى لتطبيقات React»؟

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

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

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

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

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