KISA 제보 3건(KVE-2026-2010/2011/2018)과 그 동일 계열 형제 결함을 전수 조치하고, 그 과정에서 드러난 두 결함군을 함께 닫는다. - 검증 시점과 연결 시점이 host 를 다르게 읽던 SSRF 통로를 정규화 SSoT 한 곳으로 모았다 - 세션을 여는 지점(2FA 완료·토큰 재발급)이 잠금 검사를 거치지 않아 계정 잠금이 우회됐다 - 인증도 서명도 없는 브라우저 리턴 콜백이 주문 상태를 바꾸던 통로를 4 PG 전부에서 닫고, 소유권을 대조하는 close-report 를 토스에도 신설했다. 그 결과 정리 주체를 잃는 결제창 미완료 주문은 만료 자동취소가 거둔다 - 저장소 A(_local)에만 쓰는 경로가 B 의 값을 조용히 덮던 회귀를 정본 writer 로 닫았다 (engine-v1.63.5). 한 방향만 보던 정적 검사에 반대 방향 축과 양방향 계약 테스트를 더했다 - 레이아웃 JSON 의 같은 객체 중복 키가 앞선 선언을 오류 없이 삼키던 결함군을 닫았다
18 KiB
18 KiB
Changelog
이 프로젝트의 모든 주요 변경사항을 기록합니다. 형식은 Keep a Changelog를 따르며, Semantic Versioning을 준수합니다.
[1.0.3] - 2026-08-31
Security
- 결제창이 넘겨준 승인 요청 주소에 마침표·빗금처럼 보이는 특수문자를 섞으면, 나이스페이먼츠 도메인 검사를 통과하면서 실제로는 다른 서버로 승인 요청이 나갈 수 있던 문제를 수정했습니다. 그 요청에는 인증 토큰과 상점 아이디가 실려 있어 외부로 유출될 수 있었습니다. 이제 검사와 실제 연결이 주소를 같은 방식으로 해석하며, 로그인 정보가 포함된 주소도 거부합니다. 정상적인 나이스페이먼츠 주소는 그대로 사용됩니다.
Added
- 개발자와 AI 에이전트를 위한 문서를 추가했습니다. 확장 폴더의
AGENTS.md(설계 의도·확장점·수정 시 확인할 것)와README.md(도입·운영 안내),docs/(상세 문서)로 구성됩니다. - 확장 문서에 「레이아웃 편집기 스펙」 항목을 추가했습니다. 이 확장이 레이아웃 편집기에 무엇을 선언했는지와, 화면 요소나 데이터를 추가할 때 편집기 쪽에서 함께 해야 할 일을 담습니다.
- 문서의 제품 표기를 「그누보드7」로 통일했습니다.
[1.0.2] - 2026-08-19
Security
- 가상계좌 환불·에스크로 배송등록·결제 서명 요청의 입력값에 형식·길이 검증을 추가했습니다. 잘못된 형식의 환불 계좌 정보(계좌번호·은행코드·예금주)는 PG 호출 전에 차단됩니다.
Changed
-
코어 최소 요구 버전을 7.0.10 으로 상향
-
결제 서명(SignData) 요청의 필수값 누락 응답이 표준 검증 응답(422)으로 통일되었습니다.
-
주문·결제 정보 조회가 데이터베이스 표 이름을 직접 쓰지 않고 쇼핑몰 모듈의 정의를 따르도록 내부 정리했습니다. 표시되는 내용과 동작은 종전과 동일합니다.
Fixed
- 관리자 주문 상세에서 에스크로 배송 등록이 실패하면 내부 오류 원문이 그대로 안내 문구 자리에 표시되던 문제를 수정했습니다. 이제 상황에 맞는 안내가 표시되고, 원인은 서버 로그에만 기록됩니다.
- 플러그인 설정 저장이 실패했을 때 실패 사유 대신 일반 안내 문구만 표시되던 문제를 수정했습니다. 이제 서버가 알려준 사유가 그대로 안내됩니다.
[1.0.1] - 2026-08-10
Changed
- 이커머스 모듈 최소 버전을 1.1.0으로 상향했습니다.
Fixed
- 빌드 산출물이 존재하지 않는 소스맵 파일을 참조해 브라우저 개발자 도구 사용 시 불필요한 404 요청이 발생하던 문제를 수정했습니다.
- 이커머스 관리자 주문설정에서 다른 탭에 갔다 돌아오면 간편결제 항목의 브랜드 색상 배지가 사라지고 회색 기본 아이콘으로 남던 문제를 수정했습니다. 화면을 새로고침해야만 다시 표시됐습니다.
- 결제 취소 기록과 환불 금액 오류 안내에 원화 단위가 고정 표기되던 문제를 수정했습니다. 이제 실제 결제 통화로 표시됩니다.
- 쇼핑몰 주소를 기본값이 아닌 값으로 바꾸거나 주소 없이 운영하는 상점에서, 결제를 마치거나 결제에 실패한 구매자가 존재하지 않는 페이지로 이동하던 문제를 수정했습니다. 이동 주소가 기본 주소로 고정돼 있었기 때문이며, 이제 상점 주소 설정을 따라갑니다. 이미 운영 중인 사이트도 업데이트 시 자동으로 반영되며, 이동 주소를 직접 입력해 두었다면 그 값은 그대로 유지됩니다. (#85 @hwaryeon1234 님께서 제보해주셨습니다.)
- 이 플러그인이 설치된 사이트에서 관리자 주문 목록의 '일부취소' 표시와 적립예정 포인트·마일리지 사용 금액, 주문상품의 추가옵션 요약이 보이지 않던 문제를 수정했습니다. 결제 정보 칸에 테스트결제 표시를 덧붙이는 과정에서 목록 표 구성 전체를 옛 버전으로 되돌려 놓고 있었습니다.
- 관리자 결제수단 설정에서 가상계좌·계좌이체·휴대폰결제에 PG사를 지정할 수 없던 문제를 수정했습니다. 해당 결제수단의 PG사 목록이 항상 비어 있어 기본 PG사만 사용할 수 있었고, 결제수단별로 다른 PG사를 지정하는 설정이 화면에서 불가능했습니다.
- 관리자 주문 목록에서 주문번호를 눌러 상세로 들어갈 때 걸어 둔 필터와 페이지가 사라지던 문제를 수정했습니다. (#75 @jiwonpapa 님께서 제보해주셨습니다.)
- 관리자 주문 목록에서 '이 주문자의 주문 검색'을 실행하면 검색창은 비어 보이는데 직전 검색어가 계속 적용돼 결과가 어긋나던 문제를 수정했습니다. (#75 @jiwonpapa 님께서 제보해주셨습니다.)
- 오류 안내가 뜨기는 하지만 내용이 비어 있던 문제를 수정했습니다. 설정 저장에 실패하면 서버가 알려 준 사유가 그대로 표시됩니다.
- 설정 화면의 아이콘이 의도한 크기보다 크거나 작게 보이던 문제를 수정했습니다.
- 관리자 목록에서 검색·필터·정렬을 바꿀 때 표가 다시 그려지는 동안 로딩 표시가 나오지 않던 문제를 수정했습니다. 응답이 늦으면 아무 반응이 없는 것처럼 보여 같은 조작을 반복하게 되던 상황이 사라집니다.
[1.0.0] - 2026-07-16
Fixed
- 플러그인이 활성화되어 있으면 홈, 게시판, 로그인 등 결제와 무관한 모든 페이지에서 주문서 조회 요청이 한 번씩 불필요하게 발생하던 문제를 수정했습니다. 장바구니가 없는 비회원에게는 이 요청이 매번 실패해 브라우저 오류로 기록됐습니다. 이제 이 요청 자체가 발생하지 않습니다.
- 네이버페이·카카오페이·삼성페이·애플페이 등 나이스페이먼츠 간편결제로 주문할 때, 결제가 실패했는데도 관리자에게 "신규 주문 접수" 알림이 발송되던 문제를 수정했습니다.
- 간편결제로 결제하다 실패한 뒤 다시 결제하려 하면 "임시주문을 찾을 수 없습니다" 오류가 뜨며 재결제가 불가능하던 문제를 수정했습니다. 이제 결제 실패 후에도 주문서가 유지됩니다.
- 간편결제 주문을 취소할 때 카드 취소가 함께 이뤄지지 않을 수 있던 문제를 수정했습니다.
- 나이스페이먼츠 가상계좌 발급 후 뒤늦게 PC 결제창 닫힘 보고가 들어와도 입금대기 주문이 결제실패/취소로 덮이지 않도록 보강했습니다.
- 이미 부분취소된 나이스페이먼츠 거래의 남은 잔액을 다시 취소할 때 PG 취소 요청이 전액취소로 잘못 전달되어 실패하던 문제를 수정했습니다.
- 비회원 나이스페이먼츠 주문완료/주문상세에서 매출전표 조회가 인증 사용자 전용 라우트에 막히지 않도록 게스트 주문 토큰과 결제 성공 후 임시 영수증 쿠키 접근을 지원했습니다.
- 나이스페이먼츠 인증 단계 실패(
AuthResultCode != 0000)는 실제 PG 승인 전이므로 주문/결제/주문옵션을 취소 상태로 바꾸지 않고 체크아웃 재시도가 가능하도록 수정했습니다. - 다통화 주문의 환율 스냅샷이 누락되거나 0인 경우 SignData, 결제 승인 콜백, 결제창 닫힘 보고에서 예외가 일반 승인 오류로 뭉개지지 않도록 결제 통화 설정 오류로 명시 처리했습니다.
- 나이스페이먼츠 간편결제 주문이 주문완료, 마이페이지 주문상세, 관리자 주문목록/상세에서 실제 간편결제 수단 대신
신용카드로만 표시되던 문제를 수정했습니다. - 관리자 주문목록과 주문상세 레이아웃이 리뉴얼되거나 플러그인 업데이트 과정에서 나이스페이먼츠 테스트결제 배지, 테스트 모드 안내, 결제 조회/결제 정보 패널이 누락될 수 있던 문제를 수정했습니다.
- 운영 모드에서 live MID가 비어 있으면
SR같은 잘못된 MID로 결제창을 만들지 않고 서명 요청 단계에서 실패하도록 보강했습니다. - 환불 요청 시 현재 설정값이 아니라 결제 당시 MID와 테스트/운영 모드로 나이스페이먼츠 API 서명 컨텍스트를 복원하도록 수정했습니다.
- 관리자 가상계좌 환불이 PG 취소만 호출하고 주문/결제/환불 장부를 갱신하지 않던 문제를 수정했습니다.
- 결제완료 커밋 후 후속 처리 예외가 발생한 경우 이미 결제완료 상태인 거래에 망취소를 보내지 않도록 보상 처리 가드를 추가했습니다.
- 이커머스 주문설정 화면에서 나이스페이먼츠 플러그인이 테스트 모드일 때 운영 전환 경고와 설정 이동 버튼을 표시하도록 보강했습니다.
Changed
- 간편결제가 정식 결제수단으로 취급되어 주문 내역에 실제로 선택한 결제수단(예: 네이버페이)이 그대로 기록됩니다.
- 쇼핑몰 환경설정 > 주문설정의 결제수단 목록에서 간편결제가 "PG 고정 · 나이스페이먼츠"로 표시됩니다. 간편결제는 나이스페이먼츠 전용이므로 다른 결제대행사로 바꿀 수 없습니다.
- 결제창을 띄우기 위해 브라우저 요청을 가로채 결제수단을 바꿔치기하던 내부 처리를 제거했습니다. 결제 진행 방식이 표준화됩니다.
- 주문서의 간편결제 버튼에 표시되는 브랜드 마크(네이버페이·카카오페이·삼성페이·11pay·SSG페이·L.pay 등의 색상 배지)를 화면이 그려진 뒤 덧입히던 방식에서 결제수단 정보로 처음부터 표시하는 방식으로 바꿨습니다. 여러 결제사가 함께 켜져 있을 때 표시가 안정적입니다.
- 애플페이 간편결제 버튼이 iOS 기기(iPhone·iPad)에서만 주문서에 표시되도록 했습니다. 애플페이는 iOS에서만 결제할 수 있으므로 다른 기기에서는 버튼을 감춰 혼선을 줄입니다.
- 가상계좌 입금통보 등 결제대행사 서버가 직접 보내는 요청의 발신 주소를 확인하는 처리를 코어의 새로운 표준 연결 방식으로 옮겼습니다. 발신 서버 확인 범위(입금통보 경로에만 적용, 브라우저 결제 콜백은 제외)는 이전과 동일합니다.
- 위 변경을 위해 코어 최소 요구 버전을 7.0.5로 상향했습니다. 이 플러그인을 업데이트하기 전에 코어를 7.0.5 이상으로 먼저 업데이트해 주세요.
Security
- SignData 발급 요청에 주문번호+IP 단위 rate limit과 구매자 이메일/전화번호 대조를 추가해 공개 서명 엔드포인트의 주문번호/금액 프로빙 가능성을 줄였습니다.
- 콜백 URL 생성 시 요청 헤더 대신
config('app.url')을 기준으로 절대 URL을 만들도록 고정해 프록시 환경 오동작과 헤더 기반 리다이렉트 변조 위험을 줄였습니다. - 카드 승인 콜백과 결제창 닫힘 통보 처리에 주문/결제 행잠금 후 재검증을 추가해 동시 콜백에서 마일리지, 재고, 결제 상태가 중복 반영되지 않도록 보강했습니다.
- 에스크로 배송등록 시 결제된 에스크로 거래의 저장 TID와만 바인딩하고, 결제 당시 MID와 테스트/운영 모드로 API 컨텍스트를 복원하도록 수정했습니다.
- 가상계좌 입금통보가 결제 당시 저장된 TID, MID, 계좌번호, 금액, 입금대기 상태와 일치할 때만 결제완료 처리되도록 교차검증을 강화했습니다.
- 관리자 금융 API에 주문 조회/수정 권한을 세분화해 낮은 권한의 관리자 계정이 환불·에스크로 등 자금 이동 작업을 호출하지 못하도록 보강했습니다.
- 가상계좌 입금자명과 전체 계좌번호가 애플리케이션 로그에 남지 않도록 민감정보 기록을 줄였습니다.
[1.0.0-beta.4] - 2026-06-03
Added
- 레이아웃 편집기에서 이 플러그인의 설정 화면을 테스트 모드/운영 모드 상태로 전환해 미리볼 수 있도록 했습니다.
- 레이아웃 편집기 데이터 소스 목록에서 이 확장이 제공하는 데이터 소스가 친화 명칭으로 표시되고, 어느 확장이 제공했는지 출처가 함께 표시됩니다.
Fixed
- 이커머스 관리자 주문설정 결제수단 목록에서 나이스페이먼츠 간편결제 항목이 브랜드 텍스트 배지로 표시되도록 보강했습니다.
- 이커머스 관리자 주문설정 결제수단 목록에 나이스페이먼츠 간편결제 항목이 노출되지 않던 문제를 수정했습니다.
- 체크아웃에서 나이스페이먼츠 간편결제 일부 항목이 다른 PG 간편결제 보정 로직에 잘못 잡혀 아이콘/문구가 뒤섞여 표시되던 문제를 수정했습니다.
- 체크아웃의 나이스페이먼츠 간편결제 항목이 NHN KCP 간편결제처럼 브랜드 아이콘과 제목/설명 텍스트가 함께 보이도록 표시를 보강했습니다.
- 활성 관리자 테마에 최신 시맨틱 CSS가 없어도 플러그인 설정 화면의 여백, 카드 경계, 하단 저장 영역이 깨지지 않도록 보강했습니다.
- 나이스페이먼츠 PC 결제창을 사용자가 닫거나 인증 단계 취소 콜백이 들어온 경우 임시 주문이
pending_order/ready상태로 남지 않고 결제실패/취소 상태로 기록되도록 보강했습니다. - 비회원 체크아웃에서 나이스페이먼츠 결제창 호출 직전 SignData 생성 요청이 인증 미들웨어에 막혀 401로 실패하던 문제를 수정했습니다.
- 나이스페이먼츠 승인 실패, 금액 불일치, 결제창 닫기 흐름에서 결제 레코드가
failed상태로 남도록 정합성을 보강했습니다. - 실제 PG 승인 이력이 없는 나이스페이먼츠 결제실패 주문은 동일 주문으로 재시도할 수 있도록 SignData 발급 단계에서 안전하게 결제대기 상태로 복구하도록 보강했습니다.
- 간편결제 fallback 경로에서도 쿠폰/마일리지 반영 후 실결제 금액을 PG 요청 금액으로 사용하도록 수정했습니다.
Changed
- 환경설정 / 주문 화면 결제 / 마이페이지 영수증 영역 외형을 sirsoft-admin_basic 표준 시맨틱과 정합 — 다른 화면과 같은 결로 통일.
- 관리자 화면 좌우 정렬 컨테이너(섹션 헤더 · 액션바 · 카드 상단부 등) 외형을 표준 시맨틱(.flex-between)으로 정리 — 시각 변경 없음, 향후 톤 조정이 한 곳에서 가능.
- 플러그인 환경설정 화면의 폼 라벨 / 보조 설명 / 에러 메시지 시각 시맨틱을 sirsoft-admin_basic 표준 시맨틱과 정합 — 다른 관리자 화면과 같은 결로 통일.
- 플러그인 환경설정 화면 곳곳의 텍스트 톤 (보조 설명 · 라벨 · 본문 · 강조 · 작은 보조) 시각 시맨틱을 관리자 표준 시맨틱과 정합 — 같은 결의 글자 톤이 한 곳에서 일괄 조정 가능.
- 플러그인 환경설정 화면의 세로 정렬 컨테이너 / 입력 박스를 sirsoft-admin_basic 표준 시맨틱 (.row-stack / .input) 과 정합 — 입력 행 사이에 옅은 회색 구분선(1px) 이 자동 적용되어 행 묶음 가독성이 개선되고, 입력 박스 외형이 일관 표시되도록 정리.
[1.0.0-beta.3] - 2026-05-20
Security
- 결제 승인/가상계좌 통보 응답 저장을 blacklist 제거 방식에서 whitelist 저장 방식으로 변경 — PG 응답에 새 민감 필드가 추가되어도 메타에 자동 저장되지 않도록 강화했습니다.
[1.0.0-beta.2] - 2026-05-20
Added
- PG 측 결제 취소가 확인된 시점에 활동 로그가 별도로 기록되도록 보강 — 운영자가 PG 응답 시각 / 취소 TID 등 사후 추적에 활용 가능.
- 마이페이지 주문 상세에 가상계좌 입금 안내 표시 — 결제수단이 가상계좌인 주문은 은행/계좌번호/예금주/입금 금액/입금 기한이 함께 노출되어 사용자가 입금 정보를 다시 확인할 수 있습니다.
Changed
- 플러그인 환경설정 화면의 하단 저장 버튼이 스크롤 중에도 화면에 고정되도록 개선.
- 모바일 결제창에서 사용자가 취소하거나 인증이 실패한 경우 "결제 처리 중 오류가 발생했습니다" 같은 강한 에러 메시지 없이 체크아웃 화면으로 조용히 복귀하도록 변경 — 인증 단계는 실제 결제 승인 전이라 사용자가 다시 시도하면 되는 상황이므로 불필요한 경고 노출을 제거.
Fixed
- 체크아웃에서 신용카드 외 결제수단(가상계좌/계좌이체/휴대폰)을 선택해도 PG 결제창이 열리지 않고 곧바로 주문 완료로 이동하던 문제 수정.
Security
- 결제 콜백 중복 처리 방어 추가 — 동일 거래번호로 카드 결제 콜백이 두 번 도착해도 결제완료/마일리지 적립 등이 중복 실행되지 않도록 멱등 응답 처리
- 인증 콜백의 짧은 시간 내 중복 시도 방어 추가 — 동일 인증 토큰이 60초 안에 두 번 수신되면 재시도(replay) 의심으로 차단
- 결제 승인 실패 시 자동 취소 보강 — PG 측에 잔존할 수 있는 미완료 승인을 즉시 망취소로 해제하여 사용자 환불 누락 방지
[1.0.0-beta.1] - 2026-04-22
Changed
- 플러그인 식별자를
sirsoft-pay-nicepayments에서sirsoft-pay_nicepayments로 변경 — G7 코어가 권장하는vendor-name2-part 명명 규칙에 맞추기 위함 - 사용자 노출 에러/환불 메시지를 한국어/영어 다국어로 분리 — 운영 언어에 따라 자동 노출
- PG 프로바이더 표시명을 다국어 키로 분리 — 활성 언어팩으로 자동 보강되어 다른 PG 플러그인과 동일한 컨벤션으로 정렬
Added
- 오픈 베타 릴리즈
sirsoft-pay_nicepayments.payment.before_cancel/after_cancel액션 훅 — 외부 소비자가 결제 취소 지점에 본인인증 등 확장 로직을 붙일 수 있도록 확장점 제공- 가상계좌 입금통보 IP 화이트리스트 검증 강화 — 공식 발송 IP 외 요청은 라우트 진입 단계에서 차단
- PG 도메인 전용 예외 도입 — 외부 소비자가 나이스페이먼츠 도메인 오류만 선택적으로 처리할 수 있도록 개선
- 다크 모드 지원 보강 — 결제 설정 폼 입력 필드의 포커스 링이 다크 모드에서도 정상 표시