في هذا القسم، سنشرح بعض الميزات الرئيسية في XML ذات الصلة بفهم ثغرات XXE.
ما هو الـ XML؟
XML تعني (أو هي اختصار لـ) “لغة الترميز القابلة للتوسيع. و الـ XML هي لغة مصممة لتخزين البيانات ونقلها. كما هو الحال في HTML، تستخدم XML بنية شجرية (تشبه الشجرة) من الوسوم (tags) والبيانات (data). ولكن بخلاف HTML ، لا تستخدم XML وسوماً معرَّفةً مسبقاً، و بالتالي يمكن إعطاء الوسوم أسماءً توصِّف البيانات. في وقت سابق من تاريخ الويب، كان XML شائعاً كصيغة (أو تنسيق format) لنقل البيانات (الرمز “X” في “AJAX” يشيرإلى “XML”). ولكن شعبيتها انخفضت الآن لصالح صيغة JSON.
ما هي كائنات XML؟
تعد كائنات XML طريقة لتمثيل عنصر من البيانات في مستند XML، بدلاً من استخدام البيانات نفسها. العديد من الكائنات قد تم بناؤها وفقاً لمواصفات لغة XML. على سبيل المثال، تمثل الكائنات < و > المحارف > و < . وهذه هي المحارف الخاصة المستخدمة للإشارة إلى وسوم XML ، ولذا يجب أن يتم تمثيلها عموماً باستخدام كائناتها عندما تظهر ضمن البيانات.
ما هو تعريف نوع المستند (document type definition)؟
يحتوي تعريف نوع مستند (DTD) الـ XML على تصاريح (declarations أو تعريفات) يمكنها تحديد بنية (أو هيكلية structure) مستند XML ، وأنواع قيم البيانات التي يمكن أن يحتويها، وعناصر أخرى. يتم التصريح عن DTD ضمن عنصر DOCTYPE الاختياري في بداية وثيقة XML. يمكن أن يكون DTD مُضَمَّناً بالكامل في المستند نفسه (ويعرف باسم “internal DTD” (DTD داخلي) أو يمكن أن يتم تحميله من مكان آخر (و يُعرف باسم “external DTD” (DTD خارجي) أو يمكن أن يكون هجيناً بين الاثنين.
ما هي الكائنات المخصصة في XML؟
تسمح XML بتعريف الكائنات المخصصة ضمن الـ DTD. فمثلاً:
<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>
هذا التعريف يعني أن أي استخدام لمرجع (reference) الكائن &myentity; ضمن مستند XML سيتم استبداله بالقيمة المحددة: ”my entity value”.
ما هي الكائنات الخارجية في XML؟
كائنات XML الخارجية هي نوع من الكائنات المخصصة التي يتم تعريفها خارج DTD حيث يتم الإعلان عنها.
يتم التصريح عن الكائن الخارجي باستخدام الكلمة الأساسية SYSTEM كما يجب تحديد عنوان URL الذي ينبغي تحميل قيمة الكائن منه. فمثلاً:
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>
يمكن أن يستخدم عنوان URL بروتوكول : file:// ، وبالتالي يمكن تحميل الكائنات الخارجية من ملف. فمثلاً:
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>
توفر كائنات XML الخارجية الوسيلة الأساسية التي تنشأ بها هجمات الكائنات الخارجية للـ XML.
المصدر: https://portswigger.net/web-security/xxe/xml-entities