XML 처리 모듈¶
소스 코드: Lib/xml/
XML 처리를 위한 파이썬의 인터페이스는 xml 패키지로 묶여있습니다.
참고
신뢰할 수 없거나 인증되지 않은 데이터를 구문 분석해야 하는 경우 :ref:`xml-security`를 참조하십시오.
xml 패키지의 모듈들은 최소한 하나의 SAX 호환 XML 구문 분석기가 있도록 요구함을 유의해야 합니다. Expat 구문 분석기가 파이썬에 포함되어 있으므로, xml.parsers.expat 모듈을 항상 사용할 수 있습니다.
xml.dom 과 xml.sax 패키지에 대한 설명서는 DOM과 SAX 인터페이스에 대한 파이썬 바인딩의 정의입니다.
XML 처리 서브 모듈은 다음과 같습니다:
xml.etree.ElementTree: ElementTree API, 간단하고 가벼운 XML 프로세서
xml.dom: DOM API 정의xml.dom.minidom: 최소 DOM 구현xml.dom.pulldom: 부분 DOM 트리 구축 지원
xml.sax: SAX2 베이스 클래스와 편리 함수xml.parsers.expat: Expat 구문 분석기 바인딩
이 모듈은 유틸리티 함수도 정의합니다.
- xml.is_valid_name(name)¶
문자열이 유효한 요소 또는 속성 이름인지 확인하려면
True를, 그렇지 않으면False를 반환합니다.이름에는 제어 문자 및 구분자로 사용되거나 합리적으로 사용될 수 있는 문자를 제외하고는 거의 모든 문자가 허용됩니다. “:”, “-”, “.”, “_”, “·”와 같은 문자는 허용되지만, “<”, “/”, “!”, “?”, “=”는 금지됩니다. 이름은 숫자나 “-”, “.”, “·”와 같은 문자로 시작할 수 없습니다.
Added in version 3.15.
- xml.is_valid_text(data)¶
문자열이 유효한 XML 1.0 문자 시퀀스인 경우
True을, 그렇지 않은 경우False를 반환합니다.XML 1.0 문서에는 C0 제어 문자(TAB, CR, LF 제외), 서로게이트 문자 및 특수 유니코드 문자 U+FFFE 및 U+FFFF를 제외하고 거의 모든 문자가 허용됩니다.
Added in version 3.15.
XML 보안¶
공격자는 XML이 구문 분석되는 동안 공격자가 제어하는 XML을 이용해 서비스 거부 공격을 수행하거나, 로컬 파일에 접근하거나, 다른 장치로 네트워크 연결을 생성하거나, 또는 방화벽을 우회할 수 있습니다. 이러한 행위는 Python이나 다른 곳에서 발생할 수 있습니다.
파이썬의 내장 XML 구문 분석기는 XML 파싱을 위해 일반적으로 Expat이라고 불리는 libexpat 라이브러리에 의존합니다.
기본적으로 Expat 자체는 로컬 파일에 접근하거나 네트워크 연결을 생성하지 않습니다.
2.7.2 버전보다 낮은 Expat 버전은 “빌리언 래프스”, “2차 폭발” 및 “대형 토큰” 취약점 또는 역비례적인 동적 메모리 사용에 취약할 수 있습니다. Python은 Expat 사본을 번들로 제공하며, Python이 번들된 Expat을 사용할지 아니면 시스템 전체의 Expat을 사용할지는 환경에서 Python 인터프리터가 <--with-system-expat>`로 어떻게 구성되었는지에 따라 달라집니다. 이러한 오래된 버전의 Expat을 사용하는 경우 Python이 취약할 수 있습니다. :const:!pyexpat.EXPAT_VERSION`을 확인하십시오.
xmlrpc 은 “압축 해제 폭탄” 공격에 취약 합니다.
- billion laughs(억만 웃음) / exponential entity expansion(지수적 엔티티 확장)
지수적 엔티티 확장으로도 알려진, Billion Laughs 공격은 여러 수준의 중첩된 엔티티를 사용합니다. 각 엔티티는 다른 엔티티를 여러 번 참조하며, 최종 엔티티 정의에는 작은 문자열이 포함됩니다. 지수적인 확장으로 수 기가바이트의 텍스트가 생성되고 많은 메모리와 CPU 시간이 소모됩니다.
- quadratic blowup entity expansion(이차 폭발 엔티티 확장)
이차 폭발 공격은 Billion Laughs 공격과 유사합니다; 이 역시 엔티티 확장을 남용합니다. 중첩된 엔티티 대신 2천 개 이상의 문자를 갖는 커다란 엔티티 하나를 계속 반복합니다. 공격은 지수적인 경우만큼 효율적이지 않지만 깊이 중첩된 엔티티를 금지하는 구문 분석기 대응책을 우회합니다.
- decompression bomb(압축해제 폭탄)
압축 해제 폭탄(일명 ZIP bomb)은 gzip 압축된 HTTP 스트림이나 LZMA 압축 파일과 같은, 압축된 XML 스트림을 구문 분석할 수 있는 모든 XML 라이브러리에 적용됩니다. 공격자는 전송된 데이터의 양을 3배 이상 줄일 수 있습니다.
- large tokens(대형 토큰)
Expat은 미완성 토큰을 다시 구문 분석해야 할 필요가 있습니다. Expat 2.6.0에서 도입된 보호 조치가 없으면, 이는 XML을 구문 분석하는 애플리케이션에서 서비스 거부를 유발할 수 있는 2차 실행 시간으로 이어질 수 있습니다. 이 문제는 :cve:`2023-52425`로 알려져 있습니다.