لقد ذكرنا بالفعل نوعين من ثغرات XSS : المنعكسة والمخزنة، وجميعها تشترك في السمة المشتركة وهي أن التعليمات البرمجية الخطيرة، بعد إدخالها، سيتم تنفيذها بعد استجابة الخادم، مما يعني أن الخطأ يقع على جانب الخادم.server.server. هناك نوع آخر من استغلال XSS يتعارض مع هذه الميزة، حيث يتم تنفيذ التعليمات البرمجية الضارة على الفور من جانب العميل دون المرور عبر الخادم، والمعروفة باسم DOM Based XSS أو المعروفة أيضًا بالنوع 0 XSS.
في البداية يجب أن نعرف ما هو DOM؟
DOM، وهو اختصار لـ Document Object Model، هو نموذج قياسي لـ W3C (http://www.w3.org/DOM/) مقترح لاسترداد ومعالجة بيانات المستندات المنظمة مثل HTML وXML. يمثل هذا النموذج المستندات كبنية شجرة هرمية. جميع العناصر في HTML وXML تعتبر عقدة.
DOM Based XSS هي تقنية استغلال XSS تعتمد على تغيير بنية DOM للمستند، وتحديدًا HTML.
دعونا نلقي نظرة على مثال محدد أدناه:
يحتوي موقع الويب على عنوان URL التالي لصفحة التسجيل:
example.com/register.php?message=Please fill in the form
عندما نصل إليه، نرى نموذجًا عاديًا جدًا:

يمكنك بسهولة استنتاج معلمة الرسالة التي تم تمريرها إلى محتوى الإشعار في النموذج، وإلقاء نظرة فاحصة على الكود المصدري لهذا الإشعار:
![Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS]()
يعد مقطع JavaScript مسؤولاً عن الحصول على القيمة من معلمة الرسالة وطباعتها. ومن خلال فحص الإدخال المتراخي هذا، من الممكن تمامًا خداع المستخدمين للوصول إلى عناوين URL الخطيرة.
بدلا من الصب:
message=Please fill in the form
ثم ينقل:
message=GenderMaleFemale
function show(){alert();}
وبعد ذلك ستكون استمارة التسجيل بالشكل التالي:
![Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS]()
لن يشك المستخدمون في نموذج "عادي" مثل هذا، وعند تحديد الجنس، سيتم تنفيذ البرنامج النصي:
![Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS]()
سأشرح المزيد عن القيمة التي تم تمريرها في معلمة الرسالة:
GenderMaleFemale
function show(){alert();}
والغرض الرئيسي منه هو تنفيذ وظيفة show() في كل مرة يكون هناك حدث onchage على علامة التحديد، وتنبثق وظيفة show() هنا ببساطة لتظهر أنه تم تنفيذ البرنامج النصي. ومع ذلك، في الواقع، غالبًا ما يستخدم المتسللون وظيفة show() هذه لتنفيذ برنامج نصي ينقل قيمة ملف تعريف الارتباط الخاص بالمستخدم إلى خادم محدد مسبقًا.يمكن للقراء مراجعة المقالة Reflected XSS التي تذكر كيفية إنشاء المتسللين كيف يبدو هذا الطلب؟
هذا المثال يعطينا استنتاجين مهمين. أولاً، تم تنفيذ التعليمات البرمجية الضارة فورًا عند النقر على القيمة الموجودة في علامة التحديد، مما يعني أنه تم تنفيذها مباشرة من جانب العميل دون المرور عبر استجابة الخادم. ثانيًا، تم تغيير بنية HTML باستخدام البرنامج النصي الذي تم تمريره. ويمكننا أيضًا أن نرى سيناريو الاستغلال الفعلي، حيث أن DOM Based يشبه إلى حد ما Reflected من Stored XSS عندما يتعلق الأمر بخداع المستخدمين للوصول إلى عنوان URL مضمن مع تعليمات برمجية ضارة.
يوضح الشكل التالي كل خطوة في تنفيذ تقنية هجوم DOM Based XSS:
![Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS Web9: أنواع استغلال XSS - الجزء 3: Dom Based XSS]()
يوجد أدناه مقطع فيديو لأحد أعضاء منتدى WhiteHat.vn وهو يقوم بعملية استغلال من خلال DOM Based XSS:
حظ سعيد!