0Pricing
React Academy · درس

هجمات XSS في React: dangerouslySetInnerHTML والبرامج النصية التابعة لجهات خارجية

افهم كيف يمنع الإفلات الافتراضي في React هجمات XSS، ومتى يكون dangerouslySetInnerHTML خطيرًا، وكيف تُدخل البرامج النصية التابعة لجهات خارجية مخاطر أمنية

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

حماية React المضمّنة من XSS

يُجري React تلقائيًا ترميزًا آمنًا لجميع القيم المعروضة عبر JSX قبل إدراجها في DOM. عند كتابة {userInput} في JSX، يستدعي React ما يعادل إسناد textContent — فتُعامَل القيمة كنص، ولا تُعامَل مطلقًا كـ HTML. ويمنع ذلك افتراضيًا معظم هجمات XSS في تطبيقات React.

وظيفة dangerouslySetInnerHTML

يمثّل dangerouslySetInnerHTML={{ __html: htmlString }} آلية React لتجاوز الحماية، إذ يتخطى الترميز التلقائي. والاسم مصمم عمدًا ليكون تحذيريًا: فهو يخبركم بأنكم تتحملون مسؤولية سلامة سلسلة HTML. يضبط React الخاصية innerHTML مباشرةً، مما يؤدي إلى تنفيذ أي HTML، بما في ذلك البرامج النصية ومعالجات الأحداث.

الاستخدامات المشروعة

تحتاجون فعلًا إلى dangerouslySetInnerHTML عند عرض HTML مصدره محرر نص منسق مثل TipTap أو Quill، أو نظام CMS يخزّن HTML، أو محوّل من Markdown إلى HTML. تنتج هذه المصادر ترميز HTML حقيقيًا يجب عرضه كـ HTML، لا كنص مُرمَّز.

مسار الهجوم

إذا احتوت سلسلة HTML على <script>stealCookies()</script> أو <img src=x onerror="stealData()">، فإن ضبطها كقيمة لـ innerHTML ينفّذ رمز المهاجم. ويُعدّ تمرير أي محتوى يقدمه المستخدم مباشرةً إلى dangerouslySetInnerHTML من دون تنقية ثغرة XSS خطيرة.

DOMPurify: أداة التنقية القياسية

DOMPurify هي أداة تنقية HTML القياسية في المجال للمتصفحات. فهي تحلّل سلسلة HTML في سياق معزول، وتزيل العناصر والسمات الخطرة، مثل وسوم script ومعالجات الأحداث وروابط javascript:، ثم تعيد سلسلة HTML آمنة. الاستخدام: DOMPurify.sanitize(dirtyHtml) قبل تمريرها إلى dangerouslySetInnerHTML.

مخاطر البرامج النصية التابعة لجهات خارجية

تعمل البرامج النصية التابعة لجهات خارجية، مثل أدوات التحليلات وعناصر الدردشة وشبكات الإعلانات، بالصلاحيات نفسها التي تستخدمها JavaScript الخاصة بتطبيقكم. ويمكن لبرنامج نصي تابع لجهة خارجية تم اختراقه أو كان خبيثًا أن يقرأ document.cookie، ويصل إلى localStorage، ويقرأ مدخلات النماذج، ويرسل طلبات إلى خوادم خارجية — وكل ذلك من دون أي مؤشر للمستخدم.

سياسة أمان المحتوى كطبقة دفاع

سياسة أمان المحتوى هي ترويسة HTTP تحدد البرامج النصية المسموح بتنفيذها. وحتى إذا حُقنت حمولة XSS في DOM، فيمكن لسياسة CSP مُعدّة إعدادًا صحيحًا حظر تنفيذها من خلال تقييد البرامج النصية المضمّنة والسماح فقط بمصادر البرامج النصية المدرجة في القائمة المسموح بها. وتُعدّ CSP خط الدفاع الثاني بعد تنقية المدخلات.

هجمات سلسلة التوريد عبر npm

تُعدّ حزم npm مسارًا حقيقيًا لهجمات XSS. فقد تتضمن تبعية ما رمزًا خبيثًا يسرّب متغيرات البيئة أو بيانات المستخدمين. وقد أظهر حادث node-ipc عام 2022 واختراق ua-parser-js عام 2021 أن الحزم واسعة الاستخدام يمكن الاستيلاء عليها وزرع برمجيات خبيثة فيها. دقّقوا في التبعيات باستخدام npm audit واستخدموا ملفات القفل.

ما الذي يفعله المهاجمون باستخدام XSS

يتيح هجوم XSS الناجح للمهاجم سرقة رمز JWT الخاص بالمستخدم من sessionStorage وإرساله إلى خادم يتحكم فيه المهاجم، وتنفيذ إجراءات بصفة المستخدم المصادق عليه، مثل استدعاءات API باستخدام جلسة المستخدم، وتعديل DOM لعرض محتوى تصيّدي، أو تسجيل كل ضغطة مفتاح يجريها المستخدم في التطبيق.

واجهة Trusted Types API

تتطلب واجهة Trusted Types API في المتصفح أن تستقبل جميع نقاط DOM التي تستقبل المحتوى، مثل innerHTML وeval وscript.src، كائنات ذات أنواع خاصة بدلًا من سلاسل نصية خام. ويمنع ذلك وصول حمولات XSS المعتمدة على السلاسل النصية إلى DOM على مستوى المنصة. ويعمل React على توفير التوافق مع Trusted Types، كما يمكن لـ CSP فرض استخدامها.

أنماط آمنة لمحتوى CMS

النمط الآمن لعرض HTML القادم من CMS هو: جلب HTML، وتمريره عبر DOMPurify.sanitize() باستخدام قائمة مسموح بها من الوسوم والسمات الآمنة، ثم عرضه باستخدام dangerouslySetInnerHTML={{ __html: cleanHtml }}. لا تتخطوا خطوة التنقية مطلقًا، حتى إذا كنتم تثقون بـ CMS، لأن قاعدة بيانات CMS نفسها قد تكون مخترقة.

وظيفة DOMPurify

ماذا تفعل DOMPurify عند استدعاء DOMPurify.sanitize(htmlString)؟

مراجعة الدرس

يُجري React ترميزًا آمنًا تلقائيًا لقيم JSX، مما يمنع معظم هجمات XSS. يتخطى dangerouslySetInnerHTML هذا الترميز لعرض HTML المشروع — لذا يجب دائمًا تنقية المدخلات باستخدام DOMPurify أولًا. وتُعدّ البرامج النصية التابعة لجهات خارجية وحزم npm المخترقة مسارات لهجمات XSS عبر سلسلة التوريد. وتوفر سياسة أمان المحتوى طبقة دفاع ثانية. ويتيح XSS الناجح سرقة الرموز وانتحال الهوية والتصيّد.

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

هل درس «هجمات XSS في React: dangerouslySetInnerHTML والبرامج النصية التابعة لجهات خارجية» مجاني؟

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

ماذا ستتعلم في «هجمات XSS في React: dangerouslySetInnerHTML والبرامج النصية التابعة لجهات خارجية»؟

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

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

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

كم من الوقت يستغرق درس «هجمات XSS في React: dangerouslySetInnerHTML والبرامج النصية التابعة لجهات خارجية»؟

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

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

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

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

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