Skip to content

보안 개요

HTTPC 은 기본 보안 (Secure by Default) 이며, 모든 보안 기능이 즉시 사용 가능합니다.

보안 기능 개요

기능기본값설명
TLS 최소 버전TLS 1.2TLS 1.0/1.1 거부
SSRF 방어활성화사설 IP 연결 차단
URL 검증활성화URL 형식과 프로토콜 검증
요청 헤더 검증활성화CRLF 주입 방지
Content-Length 엄격 검사활성화응답 밀반입 방지
Cookie 보안 검증선택Cookie 보안 속성 검증
응답 본문 크기 제한10MB메모리 고갈 방지
압축 해제 본문 크기 제한100MB압축 폭탄 방지
리다이렉트 제한10 회무한 리다이렉트 방지

TLS 보안

go
cfg := httpc.DefaultConfig()
// 기본 TLS 1.2-1.3
cfg.Security.MinTLSVersion = tls.VersionTLS12
cfg.Security.MaxTLSVersion = tls.VersionTLS13

DANGER

InsecureSkipVerify은 테스트에만 사용하세요. 프로덕션 환경에서는 절대 true로 설정하지 마세요.

SSRF 방어

SSRF(서버 측 요청 위조) 는 공격자가 서버를 이용해 내부 네트워크에 요청을 보내는 공격 방식입니다.

go
// 기본값: 사설 IP 차단
cfg := httpc.DefaultConfig()
// AllowPrivateIPs = false → 127.0.0.1, 10.x, 192.168.x 등 차단

// 특정 CIDR 면제 (예: VPN, VPC)
cfg.Security.SSRFExemptCIDRs = []string{
    "10.0.0.0/8",       // VPC 내부
    "100.64.0.0/10",    // Tailscale
}

// 보안 프리셋: 최강 SSRF 방어
client, _ := httpc.New(httpc.SecureConfig())

차단되는 IP 범위

범위설명
127.0.0.0/8루프백 주소
10.0.0.0/8A 클래스 사설
172.16.0.0/12B 클래스 사설
192.168.0.0/16C 클래스 사설
169.254.0.0/16링크 로컬
100.64.0.0/10CGNAT (알리바바 클라우드 메타데이터 100.100.100.200 포함)
240.0.0.0/4E 클래스 예약
::1/128IPv6 루프백
fc00::/7IPv6 고유 로컬
fe80::/10IPv6 링크 로컬

위 표는 주요 범위이며, 전체 목록 (0.0.0.0/8, TEST-NET, IPv6 문서 접두사 2001:db8::/32, NAT64 64:ff9b::/96 등 포함) 은 소스 코드의 isPrivateOrReservedIP를 참조하세요.

요청 헤더 검증

CRLF 주입과 요청 헤더 밀반입을 자동으로 방지합니다:

go
// 다음 요청 헤더는 거부됨
httpc.WithHeader("X-Custom", "value\r\nInjected: header") // CRLF 주입
httpc.WithHeader("X-Bad", "value\x00null")                // 제어 문자
go
// 엄격한 Cookie 보안
cfg := httpc.DefaultConfig()
cfg.Security.CookieSecurity = httpc.StrictCookieSecurityConfig()
// 요구사항: Secure, HttpOnly, SameSite=Strict

리다이렉트 보안

go
// 리다이렉트 비활성화 (보안 민감 시나리오)
cfg := httpc.SecureConfig() // FollowRedirects = false

// 리다이렉트 도메인 제한
cfg := httpc.DefaultConfig()
cfg.Security.RedirectWhitelist = []string{
    "api.example.com",
    "auth.example.com",
}

감사 미들웨어

go
auditMiddleware := httpc.AuditMiddleware(func(event httpc.AuditEvent) {
    // URL 마스킹됨 (자격 증명 제거)
    log.Printf("[AUDIT] %s %s -> %d (%v)",
        event.Method, event.URL, event.StatusCode, event.Duration)
})

cfg := httpc.DefaultConfig()
cfg.Middleware.Middlewares = []httpc.MiddlewareFunc{auditMiddleware}

설정이 포함된 감사

go
auditCfg := &httpc.AuditMiddlewareConfig{
    Format:         "json",
    IncludeHeaders: true,
    MaskHeaders:    []string{"Authorization", "Cookie"},
    SanitizeError:  true,
}
auditMiddleware := httpc.AuditMiddlewareWithConfig(func(event httpc.AuditEvent) {
    data, _ := json.Marshal(event)
    log.Println(string(data))
}, auditCfg)

다음 단계