먼저 알아둘 기준
HWP 5.x 문서는 OLE 복합 파일 안의 FileHeader, BodyText와 여러 스트림에 정보를 저장합니다. 레코드와 압축 방식을 해석해야 하므로 단순 텍스트 파일처럼 읽을 수 없습니다.
HWPX는 여러 XML 문서와 이미지 자원을 ZIP 컨테이너에 넣습니다. 구조를 살펴보기 쉽지만 XML 네임스페이스와 버전별 요소를 올바르게 처리해야 하며 외부 엔티티와 경로 순회 같은 보안 검증도 필요합니다.
두 형식은 같은 문서 기능을 표현하더라도 내부 모델이 다릅니다. HWP를 HWPX 파서에 넣거나 반대로 처리하면 빈 결과나 오류가 생길 수 있어 실제 형식 탐지가 첫 단계입니다.
실제 작업에서 보는 사례
HWP 5.x 파일은 OLE 시그니처와 FileHeader 스트림을 확인합니다.
HWPX 파일은 ZIP 시그니처 뒤 content.hpf와 section XML 같은 내부 구조를 검사합니다.
이름만 report.hwp인 일반 ZIP은 예상 내부 구조가 없어 가짜 또는 불일치 파일로 거부합니다.
단계별로 확인하는 방법
- 1
파일 확장자와 MIME 정보는 초기 힌트로만 사용합니다.
- 2
첫 바이트 시그니처와 컨테이너 구조를 안전하게 검사합니다.
- 3
HWP 5.x 또는 HWPX 전용 파서를 동적으로 불러옵니다.
- 4
버전·섹션과 지원하지 않는 요소를 표시한 뒤 기능을 실행합니다.
HWP와 HWPX 내부 형식 비교
| 항목 | HWP 5.x | HWPX |
|---|---|---|
| 컨테이너 | OLE 복합 바이너리 | ZIP 패키지 |
| 본문 표현 | 바이너리 레코드·스트림 | XML 요소 |
| 형식 탐지 | OLE와 FileHeader 확인 | ZIP과 필수 내부 항목 확인 |
| 주요 위험 | 압축·손상 레코드 | ZIP 경로 순회·XXE·압축 폭탄 |
주의할 점
- 확장자를 바꾸는 것은 실제 문서 형식 변환이 아닙니다.
- 압축 컨테이너를 열 때 해제 크기 제한과 내부 경로 정규화를 적용해야 합니다.
기술적 제한
- 두 사양의 모든 버전과 확장 요소를 단일 브라우저 파서가 완전히 지원하지 못할 수 있습니다.
- 실제 형식이 맞더라도 암호화, DRM과 배포용 보호 상태는 별도의 지원 제한을 만듭니다.