XXE (외부 XML 엔터티) 삽입을 방지하는 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, 제이보스 8.2)를 실행합니다. 그러나 비슷한 설정 (JDK - 1.8.0_101, 제이보스 8.2)와 QA 레드햇 시스템에서,이 메시지와 함께 예외가 발생합니다 - 일부 내 의심을 읽은 후
Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.
은 그 런타임 동안 잘못된 클래스 validator
클래스에 대한 정의를 읽는 중입니다. 이 문제를 어떻게 해결할 수 있습니까?
업데이트 제이 보스가 JAXP
의 자신의 구현을 제공 밝혀, 내 코드는 제이 보스에서 JAXP의 JDK에서 구현하지를 선택해야합니다.
java -jar jboss-modules.jar -jaxpmodule "javax.xml.jaxp-provider"
하지만이 사용 JBoss에 배포-structure.xml을하고 싶습니다 - 내가 standalone.sh
에 -jaxpmodule
인수를 전달하여이 작업을 쉽게 수행 할 수 있습니다 (이를 사용하여, 내 코드뿐만 아니라 올바른 JAXP 구현을 포착)이 같은 예외를 추가 -
<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 모듈을 제외하면 안됩니까? –
내가하고있는 모든 것은 XML을 파싱하기 때문에'JAXP'를 사용하고 있습니다. AFAIK JAXB는 XML 문서를 Java 객체 모델에 바인딩하는 데 사용됩니다. –
또한 '-jaxpmodule'인수를 통해 jboss-modules.jar은 JAXP 모듈 구현을 지정할 수 있습니다. 다른 어떤'JBoss' 모듈에서도 사용할 수있는 인수는 없습니다. 이것은 명령 행을 통해서만'JAXP' 구현을 지정하려는 의도 였는가? –