HTTP 응답 분할

C# HTTP 응답 분할

설명

사용자 입력의 CR/LF가 HTTP 응답 헤더나 쿠키에 들어가고 서버·프록시·수신자가 이를 메시지 경계로 해석하면 응답 헤더가 조작될 수 있습니다. 잘못된 값을 거부하는 서버도 있으므로 실제 처리 경로에 따라 영향이 달라집니다.

잠재적 영향

  • 캐시 오염, 쿠키 주입, 응답 변조가 발생할 수 있습니다.

해결 방법

헤더와 쿠키 값의 문법을 검증하고 CR/LF가 포함된 값은 거부하세요. 제거 방식이 필요한 경우에도 해당 필드의 허용 문자와 길이를 별도로 검증하고 서버의 기본 헤더 검증을 유지하세요.

예시

변경 전

csharp
Response.Headers["X-Name"] = value;

변경 후

value가 null이 아닌 문자열인 발췌입니다. CR/LF만 제거하므로 다른 제어 문자, 길이와 헤더별 문법 검증은 별도로 필요합니다.

csharp
Response.Headers["X-Name"] = value.Replace("\r", "").Replace("\n", "");

설명:

  • 변경 전: 입력의 CR/LF가 응답 경계로 해석되는 처리 경로에서는 응답 분할이 가능해질 수 있습니다.
  • 변경 후: 사용자가 제어하는 데이터를 헤더나 쿠키에 쓰기 전에 CR 및 LF 문자를 거부하거나 제거하세요.

참조