피드로 돌아가기
Dev.toSecurity
원문 읽기
Private Key 없이 서버 제어권을 확보한 Non-custodial 결제 패턴 설계
Server builds, wallet signs, webhooks confirm — a non-custodial Web3 checkout pattern with Solana
AI 요약
Context
서버가 결제 금액과 수신처를 제어해야 하나 Private Key를 보유하지 않는 Non-custodial 환경의 제약 발생. 클라이언트 보고 방식의 결제 확인 과정에서 발생하는 보안 취약점과 신뢰성 부족 문제 해결 필요.
Technical Solution
- 서버 주도의 결제 조건 제어를 위한 Server-side Pending Record 생성 구조 설계
- TTL 및 CSRF 보호 장치를 적용한 Checkout Session 도입으로 세션 탈취 및 재사용 방지
- TOCTOU Race Condition 차단을 위한 Atomic Token Invalidation 로직 구현
- 서버가 Unsigned Transaction을 생성하고 Wallet이 서명하는 분리 구조를 통한 제어권 확보
- Client-side 보고를 배제하고 Webhook 기반의 Idempotent Confirmation 체계 구축
실천 포인트
1. 결제 요청 시 서버 측에 Payment Intent와 유사한 Pending 상태를 먼저 기록했는가
2. Transaction 생성 권한을 서버가 갖고 서명 권한만 Wallet에 위임했는가
3. 결제 완료 확인을 클라이언트 응답이 아닌 서버 간 Webhook 통신으로 처리했는가
4. 중복 처리 방지를 위한 Idempotency Key와 토큰 무효화 전략이 포함되었는가