SD-02
📑 XML 조회 및 결과 검증 (설계)
설계단계 보안설계 · 입력검증
위험도: 상💡 쉽게 말하면
XML을 읽을 때 외부 문서를 마음대로 불러오게 두면, 편지 속에 적힌 다른 주소로 심부름을 보내는 것과 같습니다. 외부 엔터티와 DTD를 꺼두고(비활성화), 검색 조건은 변수 칸에 따로 넣어 본문과 섞이지 않게 설계해야 합니다.
XML을 읽을 때 외부 문서를 마음대로 불러오게 두면, 편지 속에 적힌 다른 주소로 심부름을 보내는 것과 같습니다. 외부 엔터티와 DTD를 꺼두고(비활성화), 검색 조건은 변수 칸에 따로 넣어 본문과 섞이지 않게 설계해야 합니다.
🎯 직접 해보기 — 공격을 실행해 보세요
아래에서 시스템 상태를 취약 또는 안전(조치 적용)으로 바꾼 뒤 공격 실행을 눌러, 같은 공격이 어떻게 다르게 끝나는지 직접 확인하세요.
# XML에 외부 엔터티를 심어 서버 내부 파일을 읽으려 한다
# [공격 실행] 버튼을 누르면 시작합니다.
📋 설정 비교 (왜 막혔나?)
✗ 취약한 설정
# 설계 결정
XPath에 입력값 직접 결합
XML 파서 외부 엔터티 허용(기본값)
→ XPath 인젝션 / XXE
✓ 안전한 설정
# 설계 결정
XPath 변수 바인딩 사용
외부 엔터티·DTD 비활성 표준화
→ 질의 변조·외부참조 차단
🔧 조치 방법
- XPath/XQuery는 변수 바인딩 방식으로 입력값을 분리하도록 설계합니다.
- XML 파서의 외부 엔터티(DTD/External Entity)를 비활성화하는 것을 공통 설정으로 강제합니다.
- 허용 스키마(XSD)로 구조 검증을 설계에 포함합니다.
✅ 점검 체크리스트
- XPath 변수 바인딩이 표준화됨
- 외부 엔터티/DTD 비활성이 강제됨
- 스키마 검증이 설계됨
점검기준: 개발보안 설계기준 1.2 XML 조회 및 결과 검증