انتقل إلى محتوى الدرس
الدرس 08
دورة ReactJS

تعابير JavaScript والحماية من XSS داخل JSXJavaScript Expressions and XSS Safety in JSX

ضمّن تعابير JavaScript الديناميكية في النصوص والسمات عبر الأقواس المعقوفة، وميّز التعابير عن الجمل البرمجية، وتعرف على الحماية التلقائية ضد هجمات XSS ومواضع كسرها.
أقسام الدرس
6
الأمثلة
4
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

لا تكفي الوسوم الثابتة وحدها لعرض اسم المتعلم أو حساب إجمالي فاتورة أو إظهار نسبة الإنجاز الحية. داخل JSX تفتح الأقواس المعقوفة { } نافذة مباشرة إلى لغة JavaScript؛ إذ تحسب React ناتج أي تعبير تكتبه بداخلها لحظة التصيير وتدرج قيمته في الواجهة.

يمكنك تضمين المتغيرات، وخصائص الكائنات مثل {course.title}، والعمليات الحسابية مثل {completed + 1}، واستدعاءات الدوال مثل {title.toUpperCase()}.

HTML
function OrderSummary() {
  const planName = 'CloseTag Pro Lab';
  const price = 24;
  const seats = 3;
  return (
    <section className="rx-card">
      <h3>{planName.toUpperCase()}</h3>
      <p>Total ({seats} seats): ${price * seats}</p>
    </section>
  );
}

تعمل الأقواس المعقوفة بالمرونة ذاتها عند تمرير السمات الديناميكية للعناصر؛ استخدم علامات التنصيص src="/logo.svg" للنصوص الثابتة، واستبدلها بالأقواس المعقوفة src={bannerUrl} لقراءة قيمة متغير برمجي.

احذر خطأ المبتدئين الشائع: لا تحط الأقواس المعقوفة بعلامتي تنصيص مثل src="{bannerUrl}"، لأن التنصيص يلغي التقييم البرمجي ويحول الرموز نفسها إلى نص حرفي مكسور!

HTML
function DeviceCard() {
  const asset = {
    src: '/images/examples/laptop-pro.webp',
    alt: 'Developer laptop running Vite build',
  };
  return (
    <figure className="rx-card">
      <img src={asset.src} alt={asset.alt} />
    </figure>
  );
}

لماذا يعمل المعامل الثلاثي {count > 0 ? 'Available' : 'Sold Out'} بسلاسة داخل JSX بينما يفشل كتابة {if (count > 0)} فوراً؟ لأن ما بداخل المعقوفات يُمرر كوسيط لدالة إنشاء العنصر، لذا يقبل فقط التعابير المنتجة لقيمة (Expressions) ويرفض الجمل التحكمية (Statements) مثل if وfor وswitch.

وعندما يتشعب الشرط، احسب النتيجة أولاً بجمل if/else عادية قبل سطر return في متغير محلي، ثم اعرض المتغير بنظافة داخل {statusLabel}.

مراحل معالجة تعابير JSX: حساب قيمة التعبير والترميز التلقائي ضد XSS والتحقق من بروتوكول الروابط

لإبقاء عناصر الواجهة مقروءة وأنيقة، تجنب حشو معادلات التنسيق الطويلة مباشرة وسط الوسوم. افصل تنسيق العملات والأرقام والتواريخ في دوال مساعدة نقية بأعلى الملف معتمداً على واجهة Intl القياسية في المتصفح، ثم استدعِها باختصار مثل {formatPrice(amount)}.

HTML
const usd = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
});

function PlanPriceCard() {
  const fee = 149.5;
  return (
    <div className="rx-card">{usd.format(fee)}</div>
  );
}

من أقوى ضمانات الأمان المدمجة في React آلية الحماية التلقائية ضد البرمجة العابرة للمواقع (Automatic XSS Escaping). فعندما تعرض نصاً قادماً من المستخدم أو الشبكة داخل الأقواس المعقوفة مثل <p>{userComment}</p>، تحوله React تلقائياً إلى عقدة نصية معزولة وترمّز محارف الوسوم قبل إدراجه في الصفحة، فتظهر أي وسوم محقونة كحروف نصية عادية يستحيل على المتصفح تنفيذها كأكواد خبيثة!

HTML
function CommentPreview() {
  const rawInput = '<b>Untrusted Tag</b> & <hr>';
  return (
    <div className="rx-card">
      <h4>Safe Escaped Output:</h4>
      <p>{rawInput}</p>
    </div>
  );
}

انتبه جيداً إلى المنفذين الوحيدين اللذين قد يكسر بهما المبرمج درع الحماية التلقائي في React عن غير قصد:

  • خاصية dangerouslySetInnerHTML: سُميت بكلمة «خطير» عمداً لتنبيهك! فتمرير نصوص المستخدم إليها يحقن عناصر خاماً مباشرة في الصفحة، لذا يُحظر استخدامها مع أي محتوى غير موثوق دون تطهيره بمكتبة قوائم بيضاء صارمة مثل DOMPurify.
  • روابط href غير المفحوصة: ترميز النصوص لا يمنع بروتوكول javascript: إذا وُضع في سمة الرابط <a href={userUrl}>! تحقق دائماً من الروابط الخارجية عبر new URL() ولا تسمح إلا بالبروتوكولات الآمنة https: أو http: أو mailto:.

راجع ملخص القواعد والأمان في الجدول التالي:

النمط البرمجي في JSXالسلوك وقت التشغيلالحكم الهندسي والأمني
<p>{untrustedText}</p>يحول المحارف إلى عقدة نصية آمنة غير تنفيذيةآمن تلقائياً ضد حقن وسوم XSS النصية
<img src={imageUrl} />يمرر قيمة المتغير البرمجي مباشرة بدون تنصيصآمن مع المسارات المحلية أو بروتوكول https:
<a href={userSubmittedUrl}>يربط بروتوكول الرابط مباشرة بعنصر الانتقاليلزم فحص البروتوكول وحظر روابط javascript:
dangerouslySetInnerHTMLيحقن شيفرة HTML خاماً دون أي ترميز تلقائيخطر؛ لا يُستخدم إلا بعد تطهير صارم بـ DOMPurify
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تعلّمت في هذا الدرس تضمين تعابير JavaScript الديناميكية في النصوص والسمات بالأقواس المعقوفة، والتفريق بين التعابير والجمل التحكمية، وتنسيق القيم بدوال Intl النقية، وآلية الحماية التلقائية ضد XSS مع ضوابط تأمين الروابط وحقن HTML. الخطوة التالية: انتقل الآن إلى الدرس رقم 9 «تنسيق المكونات في React» لمواصلة البناء التراكمي المتدرج في مسار React الحديث.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 JSX Expression التعبير البرمجي في JSX
أي مقطع كود يوضع داخل الأقواس المعقوفة { } ويُنتج قيمة محددة كالنص أو الرقم أو عنصر الواجهة.
للمراجعة
02 Control-Flow Statement الجملة التحكمية
أوامر توجيه التنفيذ مثل if وfor وswitch التي لا تُنتج قيمة مباشرة ولا تُقبل داخل الأقواس المعقوفة.
للمراجعة
03 Automatic XSS Escaping الترميز التلقائي ضد XSS
تحويل React التلقائي للنصوص المضمنة داخل المعقوفات إلى عقد نصية تمنع تنفيذ أي وسوم خبيثة محقونة.
للمراجعة
04 Protocol Allowlist القائمة البيضاء للبروتوكولات
التحقق البرمجي من أن الرابط الخارجي يبدأ ببروتوكول آمن مثل https: قبل وضعه في سمة href.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 XSS XSS
Cross-Site Scripting
ثغرة أمنية خطيرة تسمح بتنفيذ شيفرات خبيثة في متصفح المستخدم عند عرض مدخلات غير معقمة.
للمراجعة
02 URL URL
Uniform Resource Locator
عنوان المورد على الويب الذي يجب فحص بروتوكوله عند قراءته من مدخلات المستخدمين.
للمراجعة
03 JSX JSX
JavaScript XML
صياغة بناء واجهات React التي تربط الوسوم بتعابير اللغة الديناميكية عبر الأقواس المعقوفة.
للمراجعة
04 API API
Application Programming Interface
واجهات برمجية قياسية مثل Intl.NumberFormat لتنسيق الأرقام والعملات والتواريخ بنقاء.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح مثال الفاتورة في محرر التجريب وغيّر عدد المقاعد إلى 5 وأضف فقرة تحسب السعر بعد خصم عشرة بالمئة داخل الأقواس المعقوفة.

  2. افتح مثال معاينة التعليق ومرر نصاً يحتوي على <h1>Test</h1> داخل المتغير ولاحظ كيف تعرضه React كنص عادي آمن دون تحويله لعنوان فعلي.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ما الرموز المستخدمة لتضمين تعبير JavaScript ديناميكي داخل بنية JSX؟

تُستخدم الأقواس المعقوفة المفردة {expression} لتقييم تعابير JavaScript وعرض نتائجها.

02

ماذا يحدث عند كتابة <img src="{avatarUrl}" /> بوضع علامتي تنصيص حول الأقواس المعقوفة؟

تحوّل علامات التنصيص القيمة إلى نص حرفي ثابت بدلاً من قراءة المتغير البرمجي.

03

لماذا يفشل تجميع الكود عند كتابة جملة {if (isReady) ...} مباشرة داخل الأقواس المعقوفة في JSX؟

لأن if جملة تحكمية لا تُنتج قيمة، بينما لا تقبل الأقواس المعقوفة سوى التعابير مثل المعامل الثلاثي.

04

افتراضياً تقوم React بترميز النصوص المعروضة داخل { } تلقائياً قبل إدراجها في المتصفح للحماية من حقن وسوم XSS.

صواب؛ إذ تتحول النصوص داخل المعقوفات إلى محتوى نصي آمن لا يُفسَّر كوسوم تنفيذية.

05

أي حالة روابط التالية قد تسبب ثغرة XSS في React إذا لم يتحقق المبرمج من الرابط الذي أدخله المستخدم؟

تمرير رابط يبدأ ببروتوكول javascript: غير مفحوص إلى سمة href ينفذ شيفرة عند النقر عليه.

06

تمرير نصوص HTML غير موثوقة مباشرة إلى dangerouslySetInnerHTML دون تطهيرها بمكتبة مثل DOMPurify يعرّض التطبيق لثغرات XSS.

صواب؛ لأن هذه الخاصية تتجاوز درع الترميز النصي التلقائي في React بالكامل.

07

ماذا يحدث عند محاولة عرض كائن JavaScript كامل مباشرة كطفل نصي مثل <p>{userProfile}</p>؟

تُطلق React خطأً وقت التشغيل لأن الكائنات الكاملة لا تُعرض مباشرة كنص، ويجب قراءة خاصية محددة مثل {userProfile.name}.

08

ما الواجهة القياسية المدمجة في المتصفح لتنسيق العملات والأسعار بنظافة قبل عرضها في JSX؟

توفر واجهة Intl.NumberFormat تنسيقاً معيارياً دقيقاً للعملات والأرقام دون الحاجة لمكتبات خارجية.

09

يُعد استدعاء دالة مساعدة نقية مثل {formatPrice(total)} تعبيراً برمجياً صحيحاً ومسموحاً داخل معقوفات JSX.

صواب؛ فاستدعاء الدالة يُقيَّم إلى القيمة التي تعيدها، لذا فهو تعبير قياسي سليم.

10

ما البروتوكولات الآمنة التي يُسمح بها في القائمة البيضاء لروابط المواقع والتواصل التي يدخلها المستخدم؟

قصر السماح على https: وhttp: وmailto: يحجب تماماً مخاطر تنفيذ روابط javascript: الخبيثة.