OPEN HYPER STEP
← 목록으로 (화이트햇 보안)
SECURITY · 61 / 84
security
CHAPTER 61 / 84
읽기 약 2
FUNCTION

HTTP 프로토콜 해부


핵심 개념

GET, POST, 헤더, 쿠키 — HTTP의 구조를 이해해야 웹 보안을 할 수 있다.

본문

HTTP 요청·응답 기본 구조

PYTHON📋 코드 (21줄)
# ⚠️ 이 코드는 허가된 환경에서만 사용하세요.
# 원시 HTTP 요청은 이렇게 생겼습니다 — requests가 자동 생성

# 요청
"""
GET /api/users HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer eyJhbGc...
"""

# 응답
"""
HTTP/1.1 200 OK
Content-Type: application/json
Set-Cookie: sessionid=abc123; HttpOnly; Secure
X-Frame-Options: DENY

{"users": [...]}
"""

HTTP 메서드와 의미

메서드의미보안 관점
GET조회URL에 데이터 노출 → 비밀번호 절대 금지
POST생성본문에 데이터 → CSRF 토큰 필수
PUT전체 수정인증 필수
PATCH부분 수정인증 + 권한 검증
DELETE삭제멱등성 + 인증
OPTIONSCORS 사전 요청preflight 응답 검증

상태 코드 — 보안 분석에서 중요한 것들

PYTHON📋 코드 (11줄)
SECURITY_RELEVANT_STATUS = {
    200: '성공 — 정상',
    301: '영구 이동 — HTTPS 강제 리다이렉트 확인',
    401: '인증 필요 — 로그인 시도 실패 패턴 추적',
    403: '권한 없음 — 권한 우회 시도 의심',
    404: 'Not Found — 디렉토리 브루트포싱 의심',
    405: '메서드 미허용 — 허용 메서드 노출',
    429: 'Rate Limit — 봇/스캐너 차단됨',
    500: '서버 오류 — 정보 누설 가능',
    502: '게이트웨이 오류 — 백엔드 노출 가능',
}

보안 헤더 5대장

PYTHON📋 코드 (7줄)
SECURITY_HEADERS = {
    'Content-Security-Policy': 'XSS 방어',
    'Strict-Transport-Security': 'HTTPS 강제 (HSTS)',
    'X-Frame-Options': '클릭재킹 방어',
    'X-Content-Type-Options': 'MIME 스니핑 방어',
    'Referrer-Policy': 'Referer 정보 노출 제어',
}

TLS 기초 — HTTPS의 작동

📋 코드 (7줄)
1. ClientHello: 클라이언트가 지원 암호 스위트 전송
2. ServerHello: 서버가 인증서(공개키) 전송
3. Key Exchange: 세션 키 합의 (ECDHE)
4. Encrypted Application Data: AES로 본문 암호화 통신

→ 이 과정 중간에 끼어드는 게 MITM 공격
→ HSTS + 인증서 검증으로 방어

requests로 첫 요청 보내기

PYTHON📋 코드 (13줄)
import requests

url = 'https://httpbin.org/get'
r = requests.get(
    url,
    headers={'User-Agent': 'WhiteHat-Scanner/1.0'},
    timeout=5,
)

print('상태 코드:', r.status_code)
print('응답 헤더:', dict(r.headers))
print('서버 정보:', r.headers.get('Server', 'Unknown'))
print('Content-Type:', r.headers.get('Content-Type'))

⚠️ 첫 보안 점검: 서버 정보 누설

PYTHON📋 코드 (11줄)
def check_server_disclosure(url: str) -> dict:
    """서버가 자기 정보를 너무 많이 흘리고 있는지 점검."""
    r = requests.head(url, timeout=5, allow_redirects=True)
    leaks = {}
    for header in ['Server', 'X-Powered-By', 'X-AspNet-Version']:
        if header in r.headers:
            leaks[header] = r.headers[header]
    return leaks

# print(check_server_disclosure('https://example.com'))
# {'Server': 'nginx/1.18.0 (Ubuntu)'} ← Ubuntu 버전 노출됨!

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

이 HTTP 응답 헤더를 분석해서
어떤 보안 헤더가 빠져있고
어떤 정보가 누설되고 있는지 진단해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

HTTP 메서드와 상태 코드의
보안 관점 의미 비교표(Top 15)를
실전 시나리오와 함께 보여줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 웹사이트의 모든 엔드포인트에 대한
HEAD 요청 응답을 전체 분석해서
보안 헤더 점수를 매겨줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 웹 보안 헤더 표준 변화 — 
CSP Level 3, COEP/COOP의 실무 도입률을
솔직히 알려줘.

⭐ 이것만 기억하세요
HTTP 프로토콜 해부 이 3가지만 확실히 잡으세요
1.HTTP 메서드·상태 코드·보안 헤더의 의미를 알아야 웹 트래픽을 분석할 수 있다
2.X-Frame-Options/CSP/HSTS 등 보안 헤더 5대장은 웹 보안의 첫 번째 점검 항목이다
3.다음 챕터에서 requests 라이브러리를 깊이 다뤄 HTTP 분석 도구를 만든다


공유하기
진행도 61 / 84