피드로 돌아가기
Server builds, wallet signs, webhooks confirm — a non-custodial Web3 checkout pattern with Solana
Dev.toDev.to
Security

Private Key 없이 서버 제어권을 확보한 Non-custodial 결제 패턴 설계

Server builds, wallet signs, webhooks confirm — a non-custodial Web3 checkout pattern with Solana

Tom2026년 4월 19일1advanced

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와 토큰 무효화 전략이 포함되었는가

원문 읽기