البرمجة عبر المواقع (XSS): نواقل الهجوم والدفاعات

Security2026-09-13TryQuickToolBox

لماذا لا تزال XSS تطارد تطبيقات الويب

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

تشرح هذه المقالة نواقل هجوم XSS وتقدم دفاعات عملية يمكنك تنفيذها اليوم.

ما هي XSS وكيف تعمل؟

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

خذ بعين الاعتبار صفحة بحث بسيطة تعكس الاستعلام:

<?php echo 'You searched for: ' . $_GET['q']; ?>

إذا قام المهاجم بإنشاء رابط مثل search.php?q=<script>alert('XSS')</script>، فسيتم تنفيذ النص البرمجي عندما يزور الضحية الرابط.

الأنواع الثلاثة الرئيسية لـ XSS

1. XSS المنعكسة

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

2. XSS المخزنة

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

3. XSS القائمة على DOM

توجد الثغرة في JavaScript من جانب العميل التي تقرأ البيانات من مصدر غير موثوق (مثل location.hash) وتكتبها في DOM دون معالجة آمنة. قد لا يرى الخادم الحمولة الخبيثة أبدًا.

document.getElementById('output').innerHTML = location.hash.substring(1);

إذا كان الـ hash يحتوي على <img src=x>، يتم تنفيذ النص البرمجي.

نواقل الهجوم الشائعة

الدفاعات ضد XSS

1. ترميز المخرجات (التهريب السياقي)

قم بترميز جميع البيانات غير الموثوقة قبل عرضها في HTML أو السمات أو JavaScript أو CSS أو URLs. استخدم الترميز المناسب للسياق:

معظم الأطر الحديثة (React، Angular، Vue) تقوم بالتهريب التلقائي افتراضيًا، ولكن كن حذرًا عند استخدام dangerouslySetInnerHTML أو ما شابه من منافذ الهروب.

2. التحقق من المدخلات وتنقيتها

تحقق من المدخلات على جانب الخادم باستخدام قوائم السماح. بالنسبة للنص المنسق، استخدم مكتبة مثل DOMPurify لتنقية HTML، وإزالة العلامات والسمات الخطرة.

const clean = DOMPurify.sanitize(userInput);

لا تعتمد أبدًا على التحقق من جانب العميل وحده.

3. سياسة أمان المحتوى (CSP)

CSP هي آلية دفاع قوية في العمق. تقيد مصادر النصوص البرمجية القابلة للتنفيذ، والنصوص المضمنة، والموارد الأخرى. يمكن لـ CSP الصارمة حظر XSS حتى لو حدث حقن.

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

تجنب unsafe-inline و unsafe-eval. استخدم nonces أو hashes للنصوص المضمنة الشرعية.

4. سمات ملفات تعريف الارتباط الآمنة

قم بتعيين ملفات تعريف الارتباط مع HttpOnly (يمنع وصول JavaScript) و Secure (HTTPS فقط). هذا يخفف من اختطاف الجلسة عبر XSS.

5. استخدم الأطر الحديثة وتجنب واجهات برمجة التطبيقات الخطرة

تقوم أطر مثل React و Angular و Vue بتهريب البيانات تلقائيًا. تجنب التلاعب المباشر بـ DOM باستخدام innerHTML. إذا كان يجب عليك إدراج HTML، قم بتنقيته أولاً.

6. اختبار الأمان المنتظم

قم بدمج SAST و DAST واختبار الاختراق اليدوي. يمكن لأدوات مثل OWASP ZAP المساعدة في تحديد ثغرات XSS.

مقارنة أنواع XSS والدفاعات الأساسية

نوع XSSالوصفالدفاع الأساسي
المنعكسةالحمولة في الطلب، تنعكس في الاستجابةترميز المخرجات، التحقق من المدخلات
المخزنةالحمولة مخزنة على الخادم، تُرسل لجميع المستخدمينالتنقية، ترميز المخرجات، CSP
القائمة على DOMحقن من جانب العميل عبر واجهات DOM غير الآمنةواجهات DOM الآمنة، CSP، تجنب eval

خطوة بخطوة: تنفيذ دفاعات XSS

  1. حدد جميع نقاط الإدخال: النماذج، معاملات URL، الرؤوس، ملفات تعريف الارتباط.
  2. طبق ترميز المخرجات السياقي: استخدم الوظائف المدمجة أو مكتبات مثل OWASP Java Encoder.
  3. نقّي النص المنسق: استخدم DOMPurify أو ما شابه.
  4. انشر CSP: ابدأ بوضع الإبلاغ فقط، ثم فرضه.
  5. عيّن ملفات تعريف الارتباط HttpOnly و Secure.
  6. ثقف المطورين: دربهم على ممارسات الترميز الآمن.
  7. اختبر بانتظام: ادمج اختبار الأمان في CI/CD.

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

ما الفرق بين XSS و CSRF؟

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

هل يمكن لسياسة أمان المحتوى منع XSS تمامًا؟

لا، CSP هي إجراء دفاع في العمق. إنها تقلل المخاطر بشكل كبير ولكنها لا تستطيع استبدال ترميز المخرجات والتحقق من المدخلات المناسبين. قد تسمح CSP التي تم تكوينها بشكل خاطئ ببعض الهجمات.

هل التحقق من جانب العميل كافٍ لمنع XSS؟

لا. يمكن تجاوز التحقق من جانب العميل بسهولة. تحقق دائمًا وقم بالترميز على جانب الخادم، وتعامل مع جميع بيانات العميل على أنها غير موثوقة.

الخلاصة

XSS تهديد مستمر، ولكن باستراتيجية دفاع متعددة الطبقات—ترميز المخرجات، والتحقق من المدخلات، وCSP، وملفات تعريف الارتباط الآمنة—يمكنك تخفيفه بفعالية. ابق يقظًا، وحافظ على تحديث الأطر، واختبر باستمرار.

للحصول على أدوات أمان إضافية، تحقق من محلل سجل Nginx لاكتشاف الأنماط المشبوهة في سجلات الخادم الخاص بك.