2016-08-19 20 views
8

XXE (Dış XML Varlığı) Enjeksiyonu önleyen XML doğrulaması uyguluyorum. Bazı kodları OWASP XXE Prevention Cheat Sheet'dan ödünç aldım. Benim kod şöyle görünür -jboss-deployment-structure.xml JAXP dışlama ekleme

 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))); 

kod benim yerel pencereler makinede doğru (JDK 1.8.0_92, Wildfly 8.2) çalışır. Ama benzer yapılandırma (JDK - 1.8.0_101, Wildfly 8.2) ile QA Red Hat makinede, bu mesaj ile bir istisna atar - Bazı kuşkularımı okuduktan sonra

Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized. 

olduğu çalışma zamanı sırasında, yanlış sınıf validator sınıfı için tanım okunmaktadır. Bunu nasıl düzeltirim?

Güncelleme JBoss JAXP kendi uygulanması ile gelir çıkıyor ve benim kod JBoss gelen JAXP JDK uygulanmasını değil, almaya ihtiyacı var.

java -jar jboss-modules.jar -jaxpmodule "javax.xml.jaxp-provider" 

Ama bu kullanarak jboss-dağıtım-structure.xml yapmak istiyorum - Ben standalone.sh içinde -jaxpmodule argüman ileterek bu kolayca yapabilirsiniz (bu kullanarak, benim kod yanı doğru JAXP uygulanmasını aldı) ve böyle bir hariç tutma eklemek -

<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> 

Ama bu olmuyor, bunu nasıl düzeltebilirim?

+0

javax.xml.bind.api veya com.sun.xml.bind modüllerini hariç tutmanız gerekmez mi? –

+0

Yaptığım her şey bir xml ayrıştırmaktan beri 'JAXP' kullanıyorum. AFAIK 'JAXB', XML belgelerini bir java nesne modeline bağlamak için kullanılır. –

+0

Ayrıca, '-jaxpmodule' argümanı ile jboss-modules.jar, JAXP modülünün uygulanmasını belirtmemize olanak sağlar. Diğer herhangi bir JBoss modülü için böyle bir argüman yoktur. Bu, sadece JAXP uygulamasının sadece komut satırıyla belirtilmesi anlamına mı geliyor? –

cevap

-1

JAR'ları Sunucunun çalışma zamanından kaldırmaya çalışmak yerine, bu JAR'ları projenizdeki çalışma zamanında hariç tutabilmeniz önerilir. Bağımlılık yönetimi için Maven kullanıyorsanız, o zaman pom.xml'inizdeki bu JAR için, bu "JAR" için "sağlanan" şeklinde bir kapsam sağlayabilirsiniz. Kapsamlı kapsam, bu JAR'ın derleme zamanı ve çalışma zamanında kullanılacağını gösterir. çalışma zamanının kendisi tarafından sağlanmalıdır.

+0

JBur tarafından maven kullanılarak belirtilen bir bağımlılığın nasıl hariç tutulması mümkündür? –