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?
javax.xml.bind.api veya com.sun.xml.bind modüllerini hariç tutmanız gerekmez mi? –
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. –
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? –