HTTP 응답 분할(HTTP Response Splitting) 취약점
Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Response Splitting')
Last updated
Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Response Splitting')
Last updated
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class InsecureResponseSplitting {
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
String userInput = request.getParameter("input"); // 사용자 입력을 직접 헤더에 포함
response.setHeader("Custom-Header", userInput); // 취약한 코드
}
}import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.apache.commons.text.StringEscapeUtils;
public class SecureResponseSplitting {
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
String userInput = request.getParameter("input");
if (!isValidHeaderValue(userInput)) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid input");
return;
}
response.setHeader("Custom-Header", StringEscapeUtils.escapeJava(userInput)); // 안전한 코드
}
private boolean isValidHeaderValue(String value) {
return value != null && value.chars().allMatch(c -> c >= 0x21 && c != '"' && c != ',' && c != ';' && c != '\\' && c != 0x7f);
}
}