يبلوغيتش XML الكيان الخارجي القرار: هل هناك طريقة أخرى إلى جانب استخدام السجل XML؟
-
06-07-2019 - |
سؤال
لدينا تطبيق يستخدم SiteMesh، وعندما يحاول يبلوغيتش تحليل الملفات TLD، فإنه يرى أن مواصفات DOCTYPE، التي تحتوي على الإشارة إلى TLD DTD، في "<لأ href =" HTTP: //java.sun. كوم / DTD / على شبكة الانترنت لjsptaglibrary_1_2.dtd "يختلط =" نوفولو noreferrer "> http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd ".
لا يمكنوالخادم بدء الاتصالات الصادرة إلى شبكة الإنترنت، وبالتالي لا يمكن استرداد DTD، والذي يسبب نشر التطبيق إلى الفشل.
وأنا أفهم أن هذه المشكلة يمكن حلها من خلال إنشاء السجل XML في وحدة تحكم يبلوغيتش، وتحديد ملف محلي للعودة عند محاولة حل، على سبيل المثال "<لأ href =" HTTP: //java.sun. كوم / DTD / على شبكة الانترنت لjsptaglibrary_1_2.dtd "يختلط =" نوفولو noreferrer "> http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd ".
هل هناك أي طريقة أخرى لمنع الملقم من الخروج إلى "الشباك لحل مرجع الوحدة الخارجية؟ بواسطة حزم DTD مع التطبيق وإبلاغ بطريقة أو بأخرى خادم للبحث عن أن DTD هناك بدلا من "هناك"؟
المحلول
وسؤال سريع هل تحاول أن تفعل هذا لأسباب أمنية؟ ترغب في منع أي نوع من الهجوم XXE؟
وإذا كان الأمر كذلك هل يمكن تنفيذ EntityResolver الخاصة بك والتعامل معها كيف محلل يفعل أي بحث محلي أو بعيد.
يمكن العثوروالأمثلة هنا الشبكي: //www.securecoding .cert.org / ملتقى / صفحة / viewpage.action؟ PAGEID = 61702260
وإلا فإنك تحتاج إلى تعيين خصائص التكوين من XMLInputFactory للحصول على السلوك الذي تريده. ولا سيما javax.xml.stream.isSupportingExternalEntities وjavax.xml.stream.isValidating يعتمد فقط إذا كنت تعتقد أنك بحاجة التحقق من الصحة.
http://docs.oracle.com/ javaee / 5 / المعهد / javax / XML / تيار / XMLInputFactory.html
ونتطلع أيضا إلى محلل ستاكس إذا كان من المنطقي للاستخدام الخاص.