SD-07

📨 HTTP 프로토콜 유효성 검증 (설계)

설계단계 보안설계 · 입력검증

위험도: 중
💡 쉽게 말하면
HTTP 입력에 줄바꿈 기호를 끼우면, 한 장의 편지에 가짜 봉투를 한 장 더 끼워 넣는 것과 같습니다. CR/LF를 제거하고, 이동할 주소는 허용 목록으로만 보내도록 설계해야 합니다.

🎯 직접 해보기 — 공격을 실행해 보세요

아래에서 시스템 상태를 취약 또는 안전(조치 적용)으로 바꾼 뒤 공격 실행을 눌러, 같은 공격이 어떻게 다르게 끝나는지 직접 확인하세요.

현재: 취약한 설정 — 공격이 통할까요?
# 리다이렉트 주소와 헤더에 줄바꿈/외부 주소를 끼운다 # [공격 실행] 버튼을 누르면 시작합니다.

📋 설정 비교 (왜 막혔나?)

✗ 취약한 설정
# 설계 결정 입력값을 헤더/Location에 그대로 반영 → HTTP 응답분할 / 오픈 리다이렉트
✓ 안전한 설정
# 설계 결정 CR/LF 제거·헤더 API 사용 리다이렉트 대상 화이트리스트 → 헤더 변조·외부 유도 차단

🔧 조치 방법

  1. 헤더 값에 들어가는 입력의 개행(CR/LF)을 제거하고 안전한 헤더 API를 쓰도록 설계합니다.
  2. 리다이렉트 대상은 허용 목록으로만 결정하도록 설계합니다.
  3. 허용 메서드를 명시적으로 제한합니다.

✅ 점검 체크리스트

  • 헤더 개행 제거가 설계됨
  • 리다이렉트 화이트리스트가 정의됨
점검기준: 개발보안 설계기준 1.7 HTTP 프로토콜 유효성 검증