Fiddler - HTTP/HTTPS 트래픽 디버깅

HelloPong·2025년 8월 11일

공부

목록 보기
22/39
post-thumbnail

📡 Fiddler – HTTP/HTTPS 트래픽 디버깅

🧭 Fiddler란?

FiddlerHTTP/HTTPS 트래픽을 가로채고 분석할 수 있는 웹 디버깅 프록시 도구입니다.
브라우저, 앱, API 클라이언트가 서버와 주고받는 모든 요청·응답을 실시간으로 확인하고, 수정·재전송할 수 있습니다.

💡 대표적인 활용: API 디버깅, CORS 문제 해결, 모킹 테스트, 성능 분석, 모바일 트래픽 캡처 등


🧩 동작 원리

  1. 시스템 프록시 변경

    • 설치 시 기본 프록시를 127.0.0.1:8888로 설정.
    • 모든 네트워크 요청이 Fiddler를 경유.
  2. HTTPS 복호화

    • Fiddler가 자체 루트 인증서를 설치.
    • HTTPS 요청도 MITM(Man-In-The-Middle) 방식으로 복호화 후 분석 가능.
  3. 요청/응답 처리

    • 요청·응답을 수정, 차단, 지연, 모킹 가능.
    • 서버와 클라이언트 사이에 완벽히 개입.

🖥️ 주요 기능

기능설명
Sessions요청 목록(메서드, URL, 상태, 크기, 시간)
Inspectors헤더, 바디, 쿠키, JSON, Raw 보기
Composer과거 요청을 재전송·변경
AutoResponder요청에 로컬 파일/커스텀 응답 반환
Rules/Filters도메인/프로세스/상태 코드 필터링, 지연, 에러 주입
Timeline/Stats단계별 소요 시간 분석

⚙️ 필수 설정 체크리스트

  • Tools > Options > HTTPS > Decrypt HTTPS traffic 활성화
  • 필요 도메인/프로세스만 캡처하도록 필터 설정
  • 작업 종료 후 HTTPS 복호화와 인증서 반드시 비활성화
  • HTTP/2/HTTP/3 사이트는 QUIC 비활성화 필요 시 진행

📱 모바일 트래픽 캡처 방법

  1. PC와 모바일을 동일 네트워크로 연결
  2. 모바일 Wi-Fi 프록시 설정
    • 서버: PC IP
    • 포트: 8888
  3. 인증서 설치
    • http://<PC_IP>:8888 접속 → 인증서 설치
    • iOS는 설정 > 일반 > 정보 > 인증서 신뢰 설정에서 신뢰 켜기
  4. 필터로 특정 앱·도메인만 캡처

🧪 실무 활용 시나리오 6가지

  1. CORS/헤더 디버깅

    • 응답에 Access-Control-Allow-* 임시 주입 → 서버 수정 포인트 확인
  2. JWT/세션쿠키 추적

    • 만료 후 재요청 흐름 분석, 자동 재시도 스크립트 작성
  3. 모킹 개발

    • AutoResponder로 API 대신 로컬 JSON 반환 → 프런트 개발 속도 향상
  4. 장애·지연 주입

    • 랜덤 딜레이, 500 에러 강제 주입으로 프론트 내성 테스트
  5. 버그 리플레이

    • Composer에서 요청 재전송으로 경계 조건 테스트
  6. WebSocket/WSS 분석

    • Handshake 요청, 프레임 로그, Close 코드 추적

🧵 FiddlerScript 예시

// CORS 헤더 주입
if (oSession.host.Contains("api.myapp.com")) {
    oSession.oResponse.headers.Add("Access-Control-Allow-Origin", "*");
    oSession.oResponse.headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization");
}

// 200~800ms 랜덤 지연
if (oSession.uriContains("/search")) {
    Thread.Sleep(new Random().Next(200, 800));
}

// 500 에러 강제 주입
if (oSession.uriContains("/fail-me")) {
    oSession.utilCreateResponseAndBypassServer();
    oSession.oResponse.headers.HTTPResponseCode = 500;
    oSession.oResponse.headers.HTTPResponseStatus = "500 Internal Server Error";
    oSession.utilSetResponseBody("{\"error\":\"injected\"}");
}

🆚 Classic vs Everywhere vs Jam

버전특징
ClassicWindows 전용, 무료, 스크립트 강력
EverywhereWin/macOS/Linux, UI 현대적, 일부 기능 유료
Jam크롬 확장, 사용자 측 수집/재현 공유

🛡️ 보안·법적 주의사항

  • 본인 소유·허가된 시스템에서만 사용
  • 캡처 범위 최소화(민감 정보 보호)
  • 작업 후 루트 인증서 삭제 또는 비활성화

0개의 댓글