피드로 돌아가기
Webhook Security: How to Verify Incoming Requests with HMAC Signatures
Dev.toDev.to
Security

HMAC-SHA256 기반 Raw Body 검증으로 Webhook 위변조 및 Replay Attack 원천 차단

Webhook Security: How to Verify Incoming Requests with HMAC Signatures

Snappy Tools2026년 5월 2일6intermediate

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 저장 상태 점검

원문 읽기