Skip to content

[FIX] 페이플 결제결과 리다이렉트가 CORS 미들웨어에서 500 — 미허용 origin 을 throw 대신 false 로 처리 #538

Description

@minij02

✨ 배경

페이플 결제창(cpay.payple.kr)은 결제 완료 후 PCD_RST_URL(= POST /api/prompts/purchases/payple-result)로 브라우저 폼 POST를 보낸다. 이때 브라우저가 Origin: https://cpay.payple.kr 헤더를 함께 실어 보내는데, 현재 CORS 미들웨어는 화이트리스트 밖 origin 을 만나면

callback(new Error("Not allowed by CORS"));

에러를 throw 한다 → 라우터에 도달하기 전에 errorHandler 가 잡아 500 InternalServerError 응답. 결과적으로 결제는 성공했는데 프론트 프롬프트 상세 페이지로 리다이렉트되지 못하고 500 화면이 뜬다.

✨ 원인 (증상 아님)

cpay.payple.kr 가 화이트리스트에 없어서가 아니라, 미허용 origin 처리 방식이 잘못됨이 근본 원인이다.

  • 폼 POST 리다이렉트는 top-level navigation 이라 애초에 CORS 헤더가 필요 없다. 화이트리스트에 추가해도 되지만 불필요하게 권한을 넓히는 것.
  • cors 패키지의 정석은 callback(null, false)CORS 헤더만 빼고 요청은 그대로 통과시킨다. 브라우저는 여전히 응답을 읽지 못하므로 보안 수준은 동일하고, 서드파티가 보내는 브라우저 네비게이션/콜백이 500 으로 죽지 않는다.
  • 현재 방식은 payple 뿐 아니라 화이트리스트 밖 모든 origin 요청을 500 으로 기록해 에러 로그도 오염시킨다.

✨ 개발 목록

  • src/index.ts — cors origin 콜백을 callback(null, allowed) 형태로 변경 (throw 제거)
  • pnpm build 확인
  • develop 배포 후 실결제 → 상세 페이지 리다이렉트 확인, 확인되면 main 머지

✨ 기타

  • PURCHASE_RESULT_REDIRECT_URL 환경변수가 dev/prod 양쪽에 설정돼 있어야 리다이렉트가 동작한다 (미설정 시 200 OK 텍스트 응답).
  • 화이트리스트에 https://cpay.payple.kr 를 추가하는 방식은 채택하지 않음 — 네비게이션에는 CORS 헤더가 필요 없고, 다른 PG/서드파티 콜백이 늘어날 때마다 같은 500 이 재발한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    fixfixing codes

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions