WebLogic XML 외부 엔터티 확인:XML 레지스트리를 사용하는 것 외에 다른 방법이 있습니까?
-
06-07-2019 - |
문제
SiteMesh를 사용하는 애플리케이션이 있는데 WebLogic이 TLD 파일을 구문 분석하려고 하면 "에서 TLD DTD에 대한 참조가 포함된 DOCTYPE 사양을 확인합니다.http://java.sun.com/dtd/web-jsptalibrary_1_2.dtd".
서버는 인터넷에 대한 아웃바운드 연결을 시작할 수 없으므로 DTD를 검색할 수 없으며 이로 인해 애플리케이션 배포가 실패하게 됩니다.
WebLogic 콘솔에서 XML 레지스트리를 설정하고 해결하려고 할 때 반환할 로컬 파일을 지정하면 이 문제가 해결될 수 있다는 것을 이해합니다. 예를 들어 "http://java.sun.com/dtd/web-jsptalibrary_1_2.dtd".
외부 엔터티 참조를 해결하기 위해 서버가 'net'으로 나가는 것을 방지하는 다른 방법이 있습니까?애플리케이션과 함께 DTD를 패키징하고 "외부"가 아닌 내부에서 해당 DTD를 찾도록 서버에 알리는 방법이 있습니까?
해결책
빠른 질문입니다. 보안상의 이유로 이 작업을 수행하려고 하시나요?어떤 종류의 XXE 공격도 방지하고 싶나요?
그렇다면 자체 EntityResolver를 구현하고 파서가 로컬 또는 원격 조회를 수행하는 방법을 처리할 수 있습니다.
예는 여기에서 찾을 수 있습니다. https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=61702260
그렇지 않으면 원하는 동작을 얻으려면 XMLInputFactory의 구성 속성을 설정해야 합니다.특히 javax.xml.stream.isSupportingExternalEntities 및 javax.xml.stream.isValidating은 유효성 검사가 필요하다고 생각하는지 여부에 따라 다릅니다.
http://docs.oracle.com/javaee/5/api/javax/xml/stream/XMLInputFactory.html
또한 사용하기에 적합하다면 StaX 파서를 살펴보십시오.