2016-08-19 10 views
8

मैं 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> 

लेकिन यह काम नहीं कर रहा है, कैसे मैं इसे ठीक कर सकते हैं?

+0

क्या आप javax.xml.bind.api या com.sun.xml.bind मॉड्यूल को बहिष्कृत नहीं करना चाहिए? –

+0

मैं 'JAXP' का उपयोग कर रहा हूं क्योंकि मैं जो कर रहा हूं वह एक एक्सएमएल पार्स कर रहा है। AFAIK 'JAXB' का प्रयोग जावा दस्तावेज़ों को जावा ऑब्जेक्ट मॉडल में बाध्य करने के लिए किया जाता है। –

+0

इसके अलावा, '-jaxpmodule' तर्क के माध्यम से, jboss-modules.jar हमें 'JAXP' मॉड्यूल कार्यान्वयन निर्दिष्ट करने देता है। किसी अन्य 'जेबॉस' मॉड्यूल के लिए ऐसा कोई तर्क उपलब्ध नहीं है। क्या इसका मतलब यह है कि यह केवल कमांड लाइन के माध्यम से 'JAXP' कार्यान्वयन निर्दिष्ट करना था? –

उत्तर

-1

सर्वर के रनटाइम से JAR को निकालने का प्रयास करने के बजाय। हमेशा इन परियोजनाओं से रनटाइम पर इन JAR को बाहर करने की सलाह दी जाती है। उदा। यदि आप निर्भरता प्रबंधन के लिए मेवेन का उपयोग कर रहे हैं, तो अपने विशेष JAR के लिए अपने pom.xml में, आप केवल "प्रदान" के रूप में इस JAR के लिए दायरा प्रदान कर सकते हैं। प्रदान किया गया गुंजाइश इंगित करता है कि यह JAR का उपयोग संकलन समय के लिए और रनटाइम पर किया जाएगा रनटाइम द्वारा ही प्रदान किया जाए।

+0

मैवेन का उपयोग करके जेबॉस द्वारा निर्दिष्ट निर्भरता को बहिष्कृत करना कैसे संभव है? –

संबंधित मुद्दे