✏️ Java 코드 에디터
취약한 코드
public void setCookie(HttpServletRequest req, HttpServletResponse res) {
String author = req.getParameter("author");
// [취약한 코드] 입력값을 검증 없이 헤더에 포함
// 공격자가 "user\r\nSet-Cookie: session=hacked" 입력 가능
res.setHeader("Author", author);
}
💡 수정 가이드 (KISA 가이드)
1. 개행 문자(CRLF) 제거
헤더에 포함될 입력값에서 \r, \n 문자를 제거하여 응답 분할을 방지합니다.
if (author != null) {
author = author.replaceAll("\\r", "").replaceAll("\\n", "");
res.setHeader("Author", author);
}
📊 분석 결과 및 설명
🎯 목표
HTTP 응답 헤더에 사용자 입력값을 포함할 때, 개행 문자를 이용해 악의적인 헤더나 본문을 주입하지 못하도록 해야 합니다.
⚠️ 현재 취약점
HTTP Response Splitting
공격자가 헤더를 조작하여 캐시를 오염시키거나 XSS 공격 코드를 삽입할 수 있습니다.