✏️ Java 코드 에디터
취약한 코드
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// [취약한 코드] 외부 엔티티 참조 기능을 비활성화하지 않음
// 악성 XML 파일 파싱 시 내부 시스템 파일 유출 가능
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
💡 수정 가이드 (KISA 가이드 기준)
1. DOCTYPE 선언 및 외부 엔티티 비활성화
파서 설정(setFeature)을 통해 외부 개체 참조를 막습니다.
try {
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
factory.setXIncludeAware(false);
factory.setExpandEntityReferences(false);
DocumentBuilder builder = factory.newDocumentBuilder();
// ... Parsing Logic ...
} catch (ParserConfigurationException e) {
// ... Error Handling ...
}
📊 분석 결과 및 설명
🎯 목표
XML 파서가 신뢰할 수 없는 외부 DTD나 외부 엔티티를 처리하지 않도록 설정하여 XXE 공격을 방어해야 합니다.
⚠️ 현재 취약점
XXE (XML External Entity)
악의적인 XML 입력이 서버의 로컬 파일을 참조하거나 내부 네트워크를 스캔할 수 있습니다.