피드로 돌아가기
Dev.toSecurity
원문 읽기
HMAC-SHA256 기반 Raw Body 검증으로 Webhook 위변조 및 Replay Attack 원천 차단
Webhook Security: How to Verify Incoming Requests with HMAC Signatures
AI 요약
Context
인증되지 않은 Webhook Endpoint에 대한 외부 공격자의 요청 위조 및 서비스 오남용 위험 존재. 단순 URL 노출만으로 결제 알림 조작이나 권한 우회 등 치명적인 비즈니스 로직 침해 가능성 상존.
Technical Solution
- Shared Secret을 활용한 HMAC-SHA256 서명 생성 및 헤더 기반의 요청 무결성 검증 구조 설계
- JSON 파싱 전 Raw Body 바이트를 직접 처리하여 데이터 변형으로 인한 Signature 불일치 문제 해결
- Constant-time comparison 함수인 timingSafeEqual 도입을 통한 Timing Attack 벡터 제거
- Timestamp-Payload 결합 서명 방식을 통한 Request Replay Attack 방어 메커니즘 구현
- 환경 변수를 통한 Secret Key 관리 및 정기적인 Rotation 정책 적용으로 유출 리스크 최소화
실천 포인트
- Webhook 수신 시 express.json() 대신 express.raw() 등 Raw Body 추출 로직 우선 적용 - 문자열 비교 연산자(===) 대신 crypto.timingSafeEqual 또는 hmac.compare_digest 사용 - 서명 검증 로직 내에 Timestamp 유효 기간(예: 5분) 체크 로직 포함 여부 확인 - Secret Key의 코드 내 하드코딩 배제 및 Environment Variable 저장 상태 점검