XML 설정 (.xml)
W3C 표준확장성 마크업 언어(XML)는 사람이 읽을 수 있는 형식과 기계가 읽을 수 있는 형식 모두로 문서를 인코딩하기 위한 규칙 집합을 정의하는 다목적 마크업 언어입니다.
XML 온라인 압축
비공개 - 파일은 기기를 벗어나지 않습니다
검사 및 메타데이터
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 XML 파일을 식별합니다:
바이트 단위 헤더 시그니처 (매직 바이트)
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 XML 파일을 식별합니다:
16진수 시그니처 (오프셋 0):
3C 3F 78 6DASCII 표현: <?xm
표준화: W3C Recommendation (XML 1.0 Fifth Edition)
기술 사양
| 컨테이너 아키텍처 | 사용자 지정 의미론적 태그와 속성을 사용하는 계층형 텍스트 마크업 언어 |
| 압축 | Gzip / Deflate는 장황한 닫기 태그에서 85%-92%의 압축률을 달성함 |
| 바이트 엔디안 | XML 선언 인코딩 속성에 의해 결정되는 UTF-8 / UTF-16 문자 스트림 |
| 색 공간 | 해당 없음 |
| 채널 및 구조 | 요소(<tag>), 속성(attr="val"), CDATA 블록, 처리 지침 |
| 최대 크기 | 제한 없는 계층형 트리 구조 |
| 투명도 | 해당 없음 |
| 스트리밍 및 프로그레시브 | SAX(Simple API for XML) 및 StAX 파서를 사용하면 메모리 효율적인 스트림 읽기가 가능함 |
기술 비교 매트릭스: XML 대 경쟁사
| 기술적 속성 | XML (현재) | JSON | YAML | Protocol Buffers |
|---|---|---|---|---|
| 장황함 | 높음 (닫기 태그 및 속성 구문) | 낮음 (간결한 키-값 형식) | 낮음 (들여쓰기 기반) | 매우 낮음 (바이너리 직렬화) |
| 스키마 검증 | 컴파일러 강제가 포함된 성숙한 XSD 및 DTD 표준 | JSON Schema (선택 사항) | JSON Schema / Yaml 스키마 | 엄격한 .proto 스키마 정의 |
| 네임스페이스 | 네이티브 XML 네임스페이스(xmlns) 지원 | 네이티브 네임스페이스 메커니즘 없음 | 네이티브 네임스페이스 메커니즘 없음 | 패키지 선언 |
| 변환 | XSLT 선언적 변환 파이프라인 | 사용자 지정 코드 / jq 스크립트 | 사용자 지정 코드 | 사용자 지정 코드 |
일반적인 손상 모드 및 헥스 복구 가이드
XML 파싱 오류: 일치하지 않는 태그 또는 정의되지 않은 엔티티
근본 원인: 이스케이프되지 않은 예약 문('&', '<', '>' 등) 또는 여닫는 태그 간의 대소문자 불일치
복구: “&”를 “&”로, “<”를 “<”로, “>”를 “>”로 바꾸거나 임의의 텍스트를 “<![CDATA[ ... ]]>” 블록으로 감싸십시오.
보안 분석 및 파서 공격 벡터
XML 파서는 강력한 DTD 및 엔티티 확장 기능으로 인해 역사적으로 엔터프라이즈 컴퓨팅에서 가장 공격을 많이 받은 구성 요소 중 하나입니다.
알려진 공격 벡터
- XXE(XML External Entity): 로컬 서버 파일('file:///etc/passwd') 또는 내부 네트워크 엔드포인트를 참조하는 악성 DOCTYPE
- Billion Laughs 공격(XML 폭탄): 메모리에서 기하급수적으로 확장하여 서비스 거부를 유발하는 중첩된 엔티티 선언
- XPath Injection: 권한 없는 XML 데이터베이스 쿼리를 허용하는 살균되지 않은 사용자 입력
방어적 모범 사례: XML 파서에서 항상 외부 DTD 해결 및 외부 엔티티 처리를 비활성화하십시오('disallow-doctype-decl' 기능을 true로 설정).
역사적 배경 및 주요 이력
주요 장점
- XSD(XML Schema Definition) 또는 DTD를 사용한 엄격한 스키마 검증으로 강력한 데이터 무결성 보장
- 네임스페이스(xmlns)를 통해 복잡한 다중 소스 문서에서 요소 이름 충돌 방지
- 강력한 쿼리 및 변환 툴체인(XPath, XSLT, XQuery) 제공
기술적 제한 사항 및 단점
- 지나치게 장황함: 닫기 태그가 요소 이름을 반복하여 큰 파일 크기와 높은 대역폭 소비 유발
- DOM 파싱이 메모리를 많이 소비하는 큰 객체 트리 생성
- XXE(XML External Entity) 및 엔티티 확장 보안 취약점에 취약함
흥미로운 기술적 상식
- XML은 월드 와이드 웹상에서 원활하게 작동하도록 설계된 SGML(Standard Generalized Markup Language)의 간소화된 하위 집합입니다.
- 현대의 오피스 문서(.docx, .xlsx), 벡터 이미지(.svg), RSS 피드 모두 특화된 XML 방언입니다.
- 고전적인 'Billion Laughs' 서비스 거부 공격은 단 1킬로바이트의 중첩된 XML 엔티티(lol0을 열 번 참조하는 lol1부터 lol9까지)를 사용하여 파싱 시 기하급수적으로 3기가바이트의 메모리로 확장되도록 만듭니다.
자주 묻는 기술 질문
올바른 형식의(well-formed) XML과 유효한(valid) XML은 무엇이 다릅니까?
'올바른 형식의' XML은 기본적인 구문 규칙(태그 일치, 속성 따옴표, 단일 루트 요소)을 따릅니다. '유효한' XML은 잘 형성되어 있을 뿐만 아니라 외부 스키마 정의(XSD 또는 DTD)를 엄격히 준수합니다.
대부분의 웹 API에서 JSON이 XML을 대체한 이유는 무엇입니까?
JSON은 훨씬 적은 보일러플레이트, 더 빠른 파싱, 더 작은 네트워크 페이로드로 기본 자바스크립트 및 프로그래밍 언어 데이터 구조(해시 맵 및 배열)에 직접 매핑됩니다.
XML 외부 엔티티(XXE) 취약성이란 무엇입니까?
XXE 취약성은 XML 파서가 외부 문서 유형 정의(DTD)가 활성화된 신뢰할 수 없는 문서를 처리할 때 발생합니다. 공격자는 로컬 서버 파일(시스템 설정 등)이나 내부 네트워크 URL을 가리키는 엔티티를 정의하여 서버가 기밀 데이터를 읽고 유출하도록 유도할 수 있습니다.