عمليات إدخال عناصر XML الخارجية (XXE)
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
فئة OWASP: MASVS-CODE: جودة الرموز البرمجية
نظرة عامة
إنّ هجوم حقن الكيانات الخارجية في XML (XXE) هو هجوم على التطبيقات التي تُحلِّل إدخال XML. يحدث هجوم XXE عندما يعالج منظِّم XML الذي تم ضبطه بشكل ضعيف إدخال XML غير الموثوق به الذي يحتوي على إشارة
إلى عنصر خارجي. ويمكن استخدام هذا
الهجوم في تخطيط حوادث متعددة، بما في ذلك الحرمان من الخدمة،
أو الوصول إلى نظام الملفات، أو استخراج البيانات.
التأثير
عندما يحلّل تطبيق مستند XML، يمكنه معالجة أيّ DTD (Document
Type Definitions، والمعروفة أيضًا باسم الكيانات الخارجية) ضمن
المستند. ويمكن للمهاجم استغلال هذا السلوك من خلال حقن رمز ضار على هيئة
DTD. يمكن لهذا الرمز البرمجي بعد ذلك الوصول إلى أجزاء من نظام الملفات في الجهاز، ولا يمكن الوصول إليها إلا من خلال التطبيق ومن المحتمل أن يحتوي على بيانات حساسة.
بالإضافة إلى ذلك، يمكن لهذا الرمز الضار تقديم طلبات من الجهاز، ما قد يؤدي إلى تجاوز تدابير الأمان المحيطة.
أخيرًا، إذا كان التطبيق يوسّع نطاق ملفات DTD،
يمكن أن يؤدي ذلك إلى ظهور عدّة نُسخ من الكيانات المُشار إليها، مما يؤدي إلى استهلاك موارد الجهاز ورفض الخدمة.
إجراءات التخفيف
إيقاف ملفات DTD
الطريقة الأكثر أمانًا لمنع XXE هي إيقاف DTD (الكيانات الخارجية) بشكل كامل دائمًا. استنادًا إلى منظِّم التحليل المستخدَم، قد تكون الطريقة مشابهة للمثال التالي لمكتبة XML Pull Parser:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
كما أن تعطيل DTD يؤدي أيضًا إلى تأمين المحلل اللغوي ضد هجمات الحرمان من الخدمة.
إذا لم يكن من الممكن إيقاف ملفات DTD تمامًا، يجب إيقاف الكيانات الخارجية و
بيانات نوع المستندات الخارجية بطريقة خاصة
بكلّ محلل نحوي.
بسبب العدد الضخم من محركات تحليل XML في السوق، تختلف طرق منع هجمات XXE من محرك إلى آخر. قد تحتاج إلى الرجوع إلى وثائق المحرك
للحصول على مزيد من المعلومات.
يجب إعادة ضبط التطبيق بحيث لا يسمح للمستخدمين بإدخال رمز عشوائي في مقدمة مستند XML. ويجب التحقق من ذلك من جهة الخادم، إذ يمكن تجاوز عناصر التحكّم من جهة العميل.
استخدام مكتبة مختلفة
إذا تعذّر إعداد المكتبة أو الطريقة المستخدمة بطريقة آمنة، يجب وضع طريقة أخرى في الاعتبار. يمكن لمسارح تحليل سحب XML ومسارح تحليل SAX
ضبطهما بطريقة آمنة، مع عدم السماح بتعريفات البيانات التراكمية والعناصر.
المراجع
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# XML External Entities Injections (XXE)\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nAn XML eXternal Entity injection (XXE) is an attack against applications that\nparse XML input. An XXE attack occurs when untrusted XML input with a reference\nto an external entity is processed by a weakly configured XML parser. This\nattack can be used to stage multiple incidents, including denial of service,\nfile system access, or data exfiltration.\n\nImpact\n------\n\nWhen an application parses an XML document, it can process any DTDs (Document\nType Definitions, also known as external entities) contained within the\ndocument. An attacker can exploit this behavior by injecting malicious code as\nDTDs. This code can then access parts of the file system of the device, only\naccessible to the application and potentially containing sensitive data.\nFurthermore, this malicious code can make requests from the device, potentially\nbypassing perimeter security measures.\n\nLastly, if the application expands DTDs,\nthis can create a situation with multiple iterations of referenced entities,\nexhausting the resources of the device and leading to a denial of service.\n\nMitigations\n-----------\n\n### Disable DTDs\n\nThe safest way to prevent XXE is to always disable DTDs (external entities)\ncompletely. Depending on the parser in use, the method could be similar to the\nfollowing example for the XML Pull Parser library: \n\n### Java\n\n XmlPullParserFactory factory = XmlPullParserFactory.newInstance();\n factory.setFeature(\"http://apache.org/xml/features/disallow-doctype-decl\", true);\n\n### Kotlin\n\n val factory = XmlPullParserFactory.newInstance()\n factory.setFeature(\"http://apache.org/xml/features/disallow-doctype-decl\", true)\n\nDisabling DTDs also makes the parser secure against denial of service attacks.\nIf it is not possible to disable DTDs completely, then external entities and\nexternal document type declarations must be disabled in a way that's specific to\neach parser.\n\nBecause of the large number of XML parsing engines in the market, the ways to\nprevent XXE attacks differ from engine to engine. You may need to refer to your\nengine documentation for more information.\n\n### Perform input sanitisation\n\nThe application should be reconfigured so that it does not allow users to inject\narbitrary code in the XML document's preamble. This has to be verified\nserver-side, as client-side controls can be bypassed.\n\n### Use a different library\n\nIf the library or method used cannot be configured in a secure manner, a\ndifferent one should be considered. [XML Pull Parser](/reference/org/xmlpull/v1/XmlPullParser) and [SAX Parser](/reference/javax/xml/parsers/SAXParser) can\nboth be configured in a secure manner, disallowing DTDs and entities.\n\nResources\n---------\n\n- [OWASP XXE](https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing)\n- [OWASP XXE Prevention Cheat sheet](https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html)\n- [XML Constants: FEATURE_SECURE_PROCESSING](/reference/javax/xml/XMLConstants#FEATURE_SECURE_PROCESSING)\n- [XML Pull Parser](/reference/org/xmlpull/v1/XmlPullParser)\n- [SAX Parser](/reference/javax/xml/parsers/SAXParser)"]]