✏️ Java 코드 에디터
취약한 코드
public String makeXml(String userInput) {
// [취약한 코드] 입력값을 검증 없이 XML 문자열 생성에 사용
// 공격자가 XML 태그를 포함한 문자열을 입력하면 구조가 변경될 수 있음
String xml = "<user><name>" + userInput + "</name></user>";
return xml;
}
💡 수정 가이드 (KISA 가이드 기준)
1. 특수문자 이스케이프
XML에서 의미를 가지는 문자(&, <, >, ", ')를 안전한 형태로 변환합니다.
userInput = userInput.replaceAll("&", "&")
.replaceAll("<", "<")
.replaceAll(">", ">")
.replaceAll("\"", """)
.replaceAll("'", "'");
String xml = "<user><name>" + userInput + "</name></user>";
📊 분석 결과 및 설명
🎯 목표
XML 데이터를 동적으로 생성할 때, 사용자 입력값에 포함된 메타문자에 의해 XML 구조가 변형되지 않도록 해야 합니다.
⚠️ 현재 취약점
XML Injection
입력값을 그대로 연결하면 공격자가 새로운 태그를 주입하거나 기존 구조를 닫아버리는 등의 조작이 가능합니다.