ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 부적절한 XML 외부 개체 참조 - 시큐어코딩 가이드
    Web Programming 2023. 5. 16. 23:08
    728x90
    반응형

    XXE  개념

    XXE (XML External Entity)는 XML 파싱 과정에서 발생하는 보안 취약점으로, 외부 엔티티를 사용하여 악의적인 행위를 수행할 수 있는 공격입니다. 주로 악의적인 XML 문서를 통해 서버의 파일 시스템 액세스, 원격 코드 실행, 서비스 거부 등의 공격이 이루어질 수 있습니다.

    - DTD를 완전하게 비활성화 화거나 비활성화를 할 수 없는 경우에는 외부 엔티티 및 외부 문서 유형 선언을 각 파서에 맞는 고유한 방식으로 비활성화 해야함

     

    해결방안
    - DocumentBuilderFactory 사용시 .setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD,"");   
      .setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");  같이 제한 설정을 추가 해야함.
    - SAXParser 사용시 .setProperty(XMLConstants.ACCESS_EXTERNAL_DTD,""); 
      .setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");  같이 제한 설정을 추가 해야함.
    - SAXParserFactory 사용시 .setFeature("http://....", true); 와 같이 DTD를 비활성화 해야함.
    - TransformerFactory 사용시 .setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
      .setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); 같이 제한 설정을 추가 해야함.

     

    현재 쓰는 자바 버전이 1.7 버전이라서 아래와 같이 적용하여 방지함.

    자바 버전따라 다르고 어떤 소스인지 따라 다름.

    //XML파싱 준비
    DocumentBuilderFactory doc = null; 
    DocumentBuilder docbU = null; 
    
    //위에서 구성한 URL을 통해 XMl 파싱 시작 
    Document docU = null; 
    
    //XML파싱 준비 
    doc = DocumentBuilderFactory.newInstance(); 
    			
    // XXE 방지 추가
    doc.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    doc.setFeature("http://xml.org/sax/features/external-general-entities", false);
    doc.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    
    			
    docbU = doc.newDocumentBuilder(); 
    //위에서 구성한 URL을 통해 XMl 파싱 시작 
    docU = bU.parse(xmlUrl);

    ChatGTP 결과

    728x90
    반응형
Designed by Tistory.