2016-08-19 7 views
8

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> 

하지만이 작동하지 않습니다, 나는이 문제를 어떻게 해결할 수 있습니까?

+0

javax.xml.bind.api 또는 com.sun.xml.bind 모듈을 제외하면 안됩니까? –

+0

내가하고있는 모든 것은 XML을 파싱하기 때문에'JAXP'를 사용하고 있습니다. AFAIK JAXB는 XML 문서를 Java 객체 모델에 바인딩하는 데 사용됩니다. –

+0

또한 '-jaxpmodule'인수를 통해 jboss-modules.jar은 JAXP 모듈 구현을 지정할 수 있습니다. 다른 어떤'JBoss' 모듈에서도 사용할 수있는 인수는 없습니다. 이것은 명령 행을 통해서만'JAXP' 구현을 지정하려는 의도 였는가? –

답변

-1

서버의 런타임에서 JAR을 제거하는 대신 런타임에 이러한 JAR을 프로젝트에서 제외하는 것이 좋습니다. 의존성 관리를 위해 Maven을 사용하고 있다면, pom.xml의이 특정 JAR에 대해이 JAR의 범위를 "제공된"것으로 제공 할 수 있습니다. 제공된 범위는이 JAR이 컴파일 시간에 사용되고 런타임에 런타임 자체에서 제공 될 수 있습니다.

+0

maven을 사용하여 JBoss에서 지정한 종속성을 어떻게 제외 할 수 있습니까? –