الخلاصة

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

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

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

صدر RFC 3470 في يناير 2003 بوصفه أفضل ممارسة حالية رقم 70. لا يقول إن XML هو الاختيار الأفضل لكل بروتوكول، بل يضع حدوداً لمن اختاره. ومن أوضح تلك الحدود أن معنى رسالة عديمة الحالة لا ينبغي أن يعتمد سراً على شيء خارجها.

الصحة التركيبية ليست إذناً بالخروج إلى الشبكة

تثبت سلامة التكوين أن الوثيقة تتبع قواعد XML الأساسية. وإذا كانت غير سليمة، يشدد RFC 3470 على عدم تفسير جزء منها وترك الجزء الآخر. يمكن للبروتوكول أن يطلب إعادة الإرسال أو يوقف العملية، لكن التفسير الجزئي يخلق حالتين مختلفتين لدى الطرفين.

عند النجاح، يحول المحلل البنية الملموسة إلى XML Information Set. هذه النتيجة لا تحفظ كل تفاصيل البايتات. الترميز ونهايات الأسطر والكيانات والمسافات والتطبيع قد تكون عالجت المدخل قبل وصوله إلى التطبيق.

الإيصال الأول هو تجزئة البايتات، والغلاف، ونوع الوسائط، والوقت، ودليل الترميز. الإيصال التالي يحدد المحلل وإصداره وإعداده وسياسة الوصول الخارجي ونتيجة سلامة التكوين. عبارة «قبل XML» لا تقول هل سمح له بالاتصال.

يجب قبول إعلان XML، ويصبح ضرورياً عندما يسمح البروتوكول بترميزات غير UTF-8 وUTF-16. فالترميز يحدد الأحرف قبل أن يبدأ أي معنى تطبيقي.

المرجع الخارجي يضيف مدخلاً وسلطة

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

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

السياسة الجيدة صريحة: تعطيل كامل، أو كتالوج محلي ثابت، أو قائمة سماح ضيقة. ويجب تسجيل كل URI جرى حله، والبايتات المسترجعة، أو الدليل على أن الوصول كان مغلقاً.

إعادة فتح URL نفسه بعد حادثة ليست إعادة تشغيل للقرار القديم. إنها تجربة جديدة بمورد قد يكون تغير.

عنوان الأساس يحدد إلى أين يذهب الطلب

تسمح xml:base بتحديد أساس للمراجع النسبية. وقد يقدم النقل أو الحاوية أساساً آخر. إذا لم يحدد البروتوكول أولوية هذه المصادر، يمكن لمحللين متوافقين مع XML أن يطلبا موردين مختلفين من الوثيقة نفسها.

هذه ليست مسألة تنسيق. إنها قرار توجيه وسلطة. يجب أن يحفظ السجل الأساس المختار، وتسلسل الحل، والوجهة النهائية، وقرار السماح أو المنع.

تظهر المشكلة أيضاً في التحويلات والتوقيعات التي تحل المراجع. فالتحقق المشفر يتوقف على المورد الذي تم اختياره فعلاً، لا على النص القصير للمرجع فقط.

لذلك يجب اختبار البروتوكول في بيئة بلا شبكة خارجية. إذا تغير المعنى أو فشل التحقق، فالتبعية جزء من العقد ويجب إعلانها أو إزالتها.

المخطط يصف شكلاً ولا يثبت حقاً

تستطيع DTD وXML Schema وغيرها التعبير عن قيود مختلفة. يقر RFC 3470 بأن أي لغة تحقق تترك شروطاً تركيبية ودلالية إضافية في النص البرتوكولي والكود.

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

يجب أن يسجل إيصال التحقق اسم المخطط أو الملف التعريفي وإصداره ومصدره وخياراته والقيم المضافة. نجاح التحقق لا يثبت صدق القيمة أو حداثتها أو السماح بها في الحالة الحالية.

ويأتي التفويض بعد ذلك. هوية صحيحة تستطيع إرسال عملية غير مسموحة، وبنية صحيحة تستطيع طلب تغيير غير ممكن.

مساحة الاسم ليست شهادة هوية

تفصل مساحات الأسماء مفردات XML باستخدام أسماء تشبه URI. لا يلزم جلبها من الشبكة، ولا يمنح ظهور نطاق مؤسسة المرسل حق تمثيلها.

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

كما يجب أن يحدد البروتوكول سلوك الامتدادات المجهولة: التجاهل، أو الحفظ، أو التمرير، أو الرفض، أو الفشل لأنها واجبة الفهم. سلامة XML لا تختار السياسة.

ولا ينبغي وضع بنية معيارية في تعليمات المعالجة أو التعليقات، لأن مسار المعالجة العادي يجب أن يستطيع تجاهلها.

التوقيع يغطي ما أشارت إليه مراجع التوقيع

يحدد RFC 3076 صيغة Canonical XML لتسلسل قابل للتكرار لمجموعة عقد. ويحدد RFC 3275 مراجع XML Signature وتحويلاته. كلاهما يحتاج إلى تعريف دقيق للمدخل.

نجاح التوقيع يتعلق بالعقد التي اختيرت بعد التحويلات. لا يغطي تلقائياً مورداً خارجياً جلبه المحلل، أو قيمة افتراضية أضافها مخطط آخر، أو عقدة مجاورة يستخدمها التطبيق.

يجب حفظ المراجع والحلول والتحويلات وخوارزمية التسلسل والمفتاح والهوية. ثم تقارن هذه الحدود بما استخدمه التطبيق فعلاً.

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

المسافة قد تكون بيانات والترتيب قد لا يكون كذلك

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

في المقابل، ترتيب السمات ليس ذا دلالة XML، وقد تطبع القيم. فرض ترتيب مولد خاص ينشئ مجموعة فرعية خاصة ويضر قابلية التشغيل البيني.

يلزم تحديد المسافات والمحتوى المختلط وترتيب العناصر واستعمال السمات وحفظ الامتدادات. التشابه على الشاشة ليس إثباتاً للمساواة.

المحلل نفسه يحتاج إلى ميزانية

لا يوفر XML سراً أو سلامة أو مصادقة أو تفويضاً مضمناً. كود المحلل يواجه بنية يسيطر عليها الطرف الآخر، وقد يتعرض لتوسع الكيانات أو عمق مفرط أو استهلاك وقت وذاكرة أو أخطاء تنفيذ.

سجل حدود الحجم والعمق والتوسع والوقت والذاكرة والاتصال، وسلوك الفشل الكامل. قد تكون الوثيقة صحيحة نحوياً وغير مقبولة تشغيلياً.

حدث RFC 8996 سياق الحماية بنبذ TLS 1.0 و1.1. لكن قناة أحدث لا تمنع المرجع الخارجي تلقائياً، ولا تثبت معنى الوثيقة أو حق تنفيذها.

سلسلة الإثبات من الرسالة إلى الأثر

احفظ البايتات والترميز، ثم هوية المحلل وإعداده، ثم سلامة التكوين وسلوك الفشل. سجل الكيانات وعنوان الأساس وكل مورد خارجي، ثم مجموعة المعلومات.

بعدها يأتي ملف التحقق ونتيجته، ومساحات الأسماء والامتدادات، والتسلسل القانوني، ومراجع التوقيع، والهوية المصدقة. ثم تسجل القواعد الدلالية والتفويض والحالة السابقة والالتزام والنتيجة النهائية.

وعند ادعاء التشغيل البيني، أعد الاختبار مع تعطيل الشبكة الخارجية وبمحلل متوافق آخر. النتيجة المختلفة تكشف مدخلاً غير معلن.

حدود الدليل

لا ينسب هذا المقال حادثة إلى منتج أو محلل أو مؤسسة، ولا يدعي أن كل محلل يسمح بالمراجع الخارجية. كما لا يقول إن المخططات أو التوقيعات بلا قيمة؛ بل يحدد نطاقها.

ولا يكرر مقال BTW القائم عن YANG/XML، الذي يتناول شجرة YANG الفعلية والقيم الافتراضية ومراجعات المخطط والتركيب ومخزن البيانات وأثر الشبكة. الموضوع هنا هو سلطة الاتصال في بروتوكولات XML عموماً.

يستخدم المقال مبدأي الحد الأدنى للمواصفات الأولية وأولوية الكود العامل لدى Heng Lu كعدستين تحريريتين معلنتين. إنهما يفضلان عقداً مشتركاً محدوداً وإيصالات من المسار الفعلي، ولا يقدمان قياساً لنشر بعينه.

الخلاصة العملية: عندما يستطيع الإدخال أن يجعل المحلل يطلب مورداً، تصبح سياسة الاتصال جزءاً من معنى البروتوكول ومن سجله الأمني.

Sources