मैं XML सत्यापन को कार्यान्वित कर रहा हूं जो XXE (बाहरी XML इकाई) इंजेक्शन को रोकता है। मैंने OWASP XXE Prevention Cheat Sheet से कुछ कोड उधार लिया। मेरे कोड इस तरह दिखता है -jboss-deployment-structure.xml jAXP बहिष्करण
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(xsdFileURL);
Validator validator = schema.newValidator();
validator.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
validator.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
validator.validate(new StreamSource(new StringReader(xml)));
कोड सही तरीके से अपने स्थानीय विंडोज़ मशीन पर चलता है (JDK 1.8.0_92, Wildfly 8.2)। लेकिन समान config (JDK - 1.8.0_101, Wildfly 8.2) के साथ एक क्यूए रेड हैट मशीन पर, यह संदेश के साथ एक अपवाद फेंकता है -
Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.
कुछ मेरे संदेह को पढ़ने के बाद यह है कि रनटाइम के दौरान, गलत वर्ग validator
कक्षा के लिए परिभाषा पढ़ी जा रही है। मैं यह कैसे तय करुं?
अद्यतन
बाहर कर देता है Jboss JAXP
के अपने स्वयं के कार्यान्वयन के साथ आता है, और मेरे कोड JDK से JAXP कार्यान्वयन और JBoss से नहीं लेने के लिए की जरूरत है। मैं standalone.sh
में -jaxpmodule
तर्क पारित करके यह आसानी से कर सकते हैं (इस का उपयोग करते हुए, मेरे कोड सही JAXP कार्यान्वयन उठाया रूप में अच्छी तरह) -
java -jar jboss-modules.jar -jaxpmodule "javax.xml.jaxp-provider"
लेकिन मैं इस का उपयोग कर jboss तैनाती-structure.xml करना चाहते हैं और इस तरह कोई अपवर्जन जोड़ने -
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<exclusions>
<module name="javax.api" /> // is the module name correct?
</exclusions>
</deployment>
</jboss-deployment-structure>
लेकिन यह काम नहीं कर रहा है, कैसे मैं इसे ठीक कर सकते हैं?
क्या आप javax.xml.bind.api या com.sun.xml.bind मॉड्यूल को बहिष्कृत नहीं करना चाहिए? –
मैं 'JAXP' का उपयोग कर रहा हूं क्योंकि मैं जो कर रहा हूं वह एक एक्सएमएल पार्स कर रहा है। AFAIK 'JAXB' का प्रयोग जावा दस्तावेज़ों को जावा ऑब्जेक्ट मॉडल में बाध्य करने के लिए किया जाता है। –
इसके अलावा, '-jaxpmodule' तर्क के माध्यम से, jboss-modules.jar हमें 'JAXP' मॉड्यूल कार्यान्वयन निर्दिष्ट करने देता है। किसी अन्य 'जेबॉस' मॉड्यूल के लिए ऐसा कोई तर्क उपलब्ध नहीं है। क्या इसका मतलब यह है कि यह केवल कमांड लाइन के माध्यम से 'JAXP' कार्यान्वयन निर्दिष्ट करना था? –