결제는 돈이 오가는 일이라, MaruPay는 잘못된 결과가 나오기 어렵게 만들어져 있습니다. 결제는 수취가 확인될 때만 완료되고, 보내는 모든 결과에는 서명이 붙고, 정산 기록은 고쳐 쓰지 않습니다. 이 페이지는 그 뒤에 있는 운영 방식과 고객사에 부탁드리는 일을 설명합니다.
결제 무결성
- 결제는 수취가 확인될 때만 완료됩니다. 사용자가 결제했다고 알리는 것만으로는 완료되지 않습니다.
- 수취가 확인된 결제는 맞는 결제 요청이 정확히 한 건일 때만 귀속합니다. 맞는 요청이 없거나 여럿이면 확인 대상으로 보내고, 운영자가 판단합니다.
- 결제 생성 요청에는 Idempotency-Key가 붙어, 재시도된 요청이 두 번째 결제를 만들 수 없습니다.
- 정산 기록은 추가만 가능합니다. 정정은 새 기록으로 더해지므로 이력이 그대로 남습니다.
- 실결제는 고객사 연동이 연동 시험을 통과한 뒤에 열립니다.
서명된 웹훅
- 모든 웹훅에는 엔드포인트마다 다른 시크릿으로 타임스탬프와 원본 본문을 HMAC-SHA256 서명한 값이 붙습니다.
- 수신 측은 타임스탬프가 짧은 허용 범위를 벗어난 이벤트를 거절해 재전송 공격을 막아야 합니다.
- 서명 시크릿은 콘솔에서 교체할 수 있습니다.
- 전달에 실패하면 간격을 늘려 가며 재시도하고, 어떤 이벤트든 재전송할 수 있습니다. 재시도해도 이벤트 ID는 같아서 한 번만 반영할 수 있습니다.
API 접근
- API 요청은 계정별 키로 인증하며 TLS를 써야 합니다.
- 키는 콘솔에서 교체할 수 있어, MaruPay에 요청하지 않고도 바꿀 수 있습니다.
- 선택형 IP 허용 목록으로 API를 지정한 주소에서만 쓰게 할 수 있습니다.
콘솔 접근
- 콘솔은 승인된 고객사 계정만 이용할 수 있습니다.
- 모든 사용자가 2단계 로그인을 쓸 수 있고, 계정 소유자는 팀 전체에 필수로 지정할 수 있습니다.
- 권한 설정으로 팀원마다 맡은 일에 필요한 접근만 줄 수 있습니다.
운영 방식
- 운영 시스템 접근은 실제로 운영하는 인력으로 한정하고 최소 권한 원칙을 따릅니다.
- 확인 대상 결제에 대한 운영자의 판단은 누가 언제 했는지와 함께 기록됩니다.
- 전송 중인 데이터는 TLS로 암호화합니다. 운영 데이터는 네트워크 접근이 제한된 관리형 데이터베이스에 두고 정기적으로 백업합니다.
- 고객사 계정이나 데이터에 영향을 주는 사고가 생기면 지체 없이 알리고 파악한 내용을 공유합니다.
고객사에 부탁드리는 일
- 웹훅을 처리하기 전에 반드시 서명을 검증하고, 이벤트 ID마다 한 번만 반영하세요.
- API 키와 웹훅 시크릿은 서버에만 두고, 클라이언트 코드나 저장소에 넣지 마세요.
- IP 허용 목록을 켜고, 팀 전체에 2단계 로그인을 필수로 지정하세요.
- 팀원이 떠나거나 시크릿이 노출됐을 수 있으면 키와 시크릿을 교체하세요.
취약점 제보
보안 문제를 발견하셨다면 내용과 재현 방법을 이메일로 보내 주세요. 다른 사람의 데이터에 접근하거나, 서비스를 방해하거나, 수정 전에 공개하지는 말아 주세요. 제보를 받으면 회신하고 진행 상황을 알려 드립니다.
이 페이지에는 인증 보유를 적지 않습니다. 검토에 특정 보안 문서가 필요하면 가맹 검토 단계에서 말씀해 주세요.
이 문서에 대해 궁금한 점이 있나요?
문의하기: [email protected]