@@ -4,7 +4,7 @@ import logger from '@/configs/logger.config';
44import pool from '@/configs/db.config' ;
55import { CustomError , DBError , InvalidTokenError } from '@/exception' ;
66import { VelogJWTPayload , User } from '@/types' ;
7- import crypto from " crypto" ;
7+ import crypto from ' crypto' ;
88
99/**
1010 * 요청에서 토큰을 추출하는 함수
@@ -69,36 +69,37 @@ const verifyBearerTokens = () => {
6969
7070/**
7171 * Sentry 웹훅 요청의 시그니처 헤더를 검증합니다.
72- * HMAC SHA256과 Sentry의 Client Secret를 사용하여 요청 본문을 해시화하고,
72+ * HMAC SHA256과 Sentry의 Client Secret를 사용하여 요청 본문을 해시화하고,
7373 * Sentry에서 제공하는 시그니처 헤더와 비교하여 요청의 무결성을 확인합니다.
7474 */
7575function verifySentrySignature ( ) {
7676 return ( req : Request , res : Response , next : NextFunction ) => {
7777 try {
78- if ( ! process . env . SENTRY_CLIENT_SECRET ) throw new Error ( " SENTRY_CLIENT_SECRET가 env에 없습니다" ) ;
79-
80- const hmac = crypto . createHmac ( " sha256" , process . env . SENTRY_CLIENT_SECRET ) ;
81-
78+ if ( ! process . env . SENTRY_CLIENT_SECRET ) throw new Error ( ' SENTRY_CLIENT_SECRET가 env에 없습니다' ) ;
79+
80+ const hmac = crypto . createHmac ( ' sha256' , process . env . SENTRY_CLIENT_SECRET ) ;
81+
8282 // Raw body 사용 - Express에서 파싱되기 전의 원본 데이터 필요
8383 // req.rawBody가 없다면 fallback으로 JSON.stringify 사용 (완벽하지 않음)
8484 // @ts -expect-error - rawBody는 커스텀 미들웨어에서 추가되는 속성
8585 const bodyToVerify = req . rawBody || JSON . stringify ( req . body ) ;
86- const sentrySignature = req . headers [ "sentry-hook-signature" ] ;
87-
88- if ( ! bodyToVerify ) throw new Error ( "요청 본문이 없습니다." ) ;
89- if ( ! sentrySignature ) throw new Error ( "시그니처 헤더가 없습니다." ) ;
90-
91- hmac . update ( bodyToVerify , "utf8" ) ;
92- const digest = hmac . digest ( "hex" ) ;
93-
94- if ( digest !== sentrySignature ) throw new CustomError ( "유효하지 않은 시그니처 헤더입니다." , "INVALID_SIGNATURE" , 400 ) ;
95-
86+ const sentrySignature = req . headers [ 'sentry-hook-signature' ] ;
87+
88+ if ( ! bodyToVerify ) throw new Error ( '요청 본문이 없습니다.' ) ;
89+ if ( ! sentrySignature ) throw new Error ( '시그니처 헤더가 없습니다.' ) ;
90+
91+ hmac . update ( bodyToVerify , 'utf8' ) ;
92+ const digest = hmac . digest ( 'hex' ) ;
93+
94+ if ( digest !== sentrySignature )
95+ throw new CustomError ( '유효하지 않은 시그니처 헤더입니다.' , 'INVALID_SIGNATURE' , 400 ) ;
96+
9697 next ( ) ;
9798 } catch ( error ) {
9899 logger . error ( '시그니처 검증 중 오류가 발생하였습니다. : ' , error ) ;
99100 next ( error ) ;
100101 }
101- }
102+ } ;
102103}
103104
104105/**
0 commit comments