안녕하세요. 토스페이먼츠 결제 연동 과정에서 보안 관련 질문이 있어 문의드립니다.
현재 이해한 결제 흐름
1. 클라이언트에서 widgets.setAmount()로 금액 설정 (UI 표시용)
2. 결제 요청 전 서버에 orderId와 실제 상품 금액을 저장 (보안 검증용)
3. 결제 인증 완료 후 successUrl에 amount 쿼리 파라미터가 포함되어 리다이렉트
4. 서버에서 저장된 실제 금액으로 승인 API 호출
질문사항
1. successUrl의 amount 파라미터 출처
- 이 값이 클라이언트 setAmount()에서 설정한 값인지요?
- 만약 그렇다면, 악의적 사용자가 브라우저 개발자 도구로 이 값을 조작할 수 있지 않나요?
2. amount 파라미터의 용도
- MCP 가이드에서 "돌아온 금액과 같은지 확인"하라고 하는데, 클라이언트에서 조작 가능한 값으로 검증하는 것이 의미가 있나요?
- 실제로는 서버에 저장한 신뢰할 수 있는 금액으로만 승인해야 하는 것 아닌가요?
3. 설계 의도
- 조작 가능한 클라이언트 값을 쿼리 파라미터로 되돌려주는 이유가 궁금합니다
- 디버깅, 로깅, 또는 다른 특별한 목적이 있는 건가요?
현재 구현 방식
저희는 현재 successUrl의 amount는 검증에 사용하지 않고, 서버에 미리 저장한 실제 상품 금액으로만 승인 API를 호출하고 있습니다. 이것이 올바른 방식인지 확인해주세요.
감사합니다.