From ebd18b6001de408bec4efdd571b88098fd863192 Mon Sep 17 00:00:00 2001 From: thisgun Date: Fri, 21 Aug 2026 02:08:28 +0000 Subject: [PATCH] =?UTF-8?q?[KVE-2026-1813]=20=EB=AF=B8=EC=99=84=EB=A3=8C?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=ED=99=95=EC=A0=95=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=A0=95=EC=A0=9C=20=EB=B0=8F=20=EA=B2=B0?= =?UTF-8?q?=EC=A0=9C=EC=88=98=EB=8B=A8=20=EC=B6=9C=EB=A0=A5=20=EC=9D=B8?= =?UTF-8?q?=EC=BD=94=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 미완료주문을 주문으로 확정할 때 임시 데이터에서 복원한 결제수단, 접속 IP, 테스트 결제 여부를 정제 없이 사용하던 것을 이웃 필드와 동일한 방식으로 처리한다. 접속 IP는 표기 형식에 맞지 않으면 저장하지 않고, 테스트 결제 여부는 정수로만 저장하며, 세 값 모두 배열로 전달된 경우를 함께 걸러낸다. 임시주문 저장 시 접속 IP와 테스트 결제 여부를 서버에서 결정하는 처리가 일반 주문 분기 안에만 있어 개인결제 경로에서는 요청값이 그대로 저장되던 것을 분기 밖으로 옮겨 항상 서버 값을 사용하도록 한다. 결제수단 값이 그대로 출력되던 관리자 주문상세, 주문목록, 부분취소 화면과 구매자 주문조회 화면(웹/모바일/테마)에 get_text() 인코딩을 적용한다. 주문상세는 표시 문자열을 여러 곳에서 재사용하므로 생성 지점에서 처리한다. Co-Authored-By: Claude Opus 5 (1M context) (cherry picked from commit 77069575096881a31b29fdf130c83226610bf8df) --- adm/shop_admin/inorderformupdate.php | 9 ++++++--- adm/shop_admin/orderform.php | 14 +++++++------- adm/shop_admin/orderlist.php | 4 ++-- adm/shop_admin/orderpartcancel.php | 4 ++-- adm/shop_admin/orderpartcancelupdate.php | 2 +- mobile/shop/orderinquiryview.php | 2 +- shop/ajax.orderdatasave.php | 6 ++++-- shop/orderinquiryview.php | 2 +- theme/basic/shop/orderinquiryview.php | 2 +- 9 files changed, 25 insertions(+), 20 deletions(-) diff --git a/adm/shop_admin/inorderformupdate.php b/adm/shop_admin/inorderformupdate.php index f038588ea..06504776c 100644 --- a/adm/shop_admin/inorderformupdate.php +++ b/adm/shop_admin/inorderformupdate.php @@ -246,6 +246,9 @@ $od_bank_account = isset($data['od_bank_account']) ? addslashes(clean_xss_tags( $od_tno = ''; $od_app_no = ''; $od_hope_date = isset($data['od_hope_date']) ? addslashes(clean_xss_tags(stripslashes($data['od_hope_date']), 1, 1)) : ''; +$od_ip = (isset($data['od_ip']) && !is_array($data['od_ip']) && preg_match('/^[0-9a-fA-F:.]{1,45}$/', $data['od_ip'])) ? $data['od_ip'] : ''; +$od_settle_case = (isset($data['od_settle_case']) && !is_array($data['od_settle_case'])) ? addslashes(clean_xss_tags(stripslashes($data['od_settle_case']), 1, 1)) : ''; +$od_test = (isset($data['od_test']) && !is_array($data['od_test'])) ? (int) $data['od_test'] : 0; // 주문서에 입력 $sql = " insert {$g5['g5_shop_order_table']} @@ -297,9 +300,9 @@ $sql = " insert {$g5['g5_shop_order_table']} od_shop_memo = '', od_hope_date = '{$od_hope_date}', od_time = '{$od['dt_time']}', - od_ip = '{$data['od_ip']}', - od_settle_case = '{$data['od_settle_case']}', - od_test = '{$data['od_test']}' + od_ip = '$od_ip', + od_settle_case = '$od_settle_case', + od_test = '$od_test' "; $result = sql_query($sql, true); diff --git a/adm/shop_admin/orderform.php b/adm/shop_admin/orderform.php index c122c6ed4..28a662066 100644 --- a/adm/shop_admin/orderform.php +++ b/adm/shop_admin/orderform.php @@ -497,7 +497,7 @@ if ($is_nicepay_vbank_pg_cancel) { //$amount['미수'] = $amount['order'] - $amount['receipt'] - $amount['coupon']; // 결제방법 - $s_receipt_way = check_pay_name_replace($od['od_settle_case'], $od); + $s_receipt_way = get_text(check_pay_name_replace($od['od_settle_case'], $od)); if ($od['od_receipt_point'] > 0) $s_receipt_way .= "+포인트"; @@ -574,7 +574,7 @@ if ($is_nicepay_vbank_pg_cancel) { - 입금액 + 입금액 @@ -597,7 +597,7 @@ if ($is_nicepay_vbank_pg_cancel) { - 결제액 + 결제액 @@ -870,7 +870,7 @@ if ($is_nicepay_vbank_pg_cancel) { - + 원 @@ -904,7 +904,7 @@ if ($is_nicepay_vbank_pg_cancel) { - + 원 @@ -1036,7 +1036,7 @@ if ($is_nicepay_vbank_pg_cancel) { 개인결제추가 0 && ($od['od_settle_case'] == '신용카드' || $od['od_settle_case'] == '계좌이체' || $od['od_settle_case'] == 'KAKAOPAY' || ($od['od_pg'] == 'nicepay' && $od['od_settle_case'] == '간편결제'))) { ?> - 부분취소 + 부분취소 목록 @@ -1480,7 +1480,7 @@ function form_submit(f) var cancel_pg = "카카오페이"; - var cancel_pg = "PG사의 "; + var cancel_pg = "PG사의 "; // 체크하지 않은 나머지 품목이 모두 취소류 상태이면 이번 처리로 주문 전체가 취소된다. diff --git a/adm/shop_admin/orderlist.php b/adm/shop_admin/orderlist.php index f8aa4e3e1..a4fc6c166 100644 --- a/adm/shop_admin/orderlist.php +++ b/adm/shop_admin/orderlist.php @@ -305,7 +305,7 @@ if( function_exists('pg_setting_check') ){ $s_receipt_way = $s_br = ""; if ($row['od_settle_case']) { - $s_receipt_way = check_pay_name_replace($row['od_settle_case'], $row); + $s_receipt_way = get_text(check_pay_name_replace($row['od_settle_case'], $row)); $s_br = '
'; } else @@ -402,7 +402,7 @@ if( function_exists('pg_setting_check') ){ - + diff --git a/adm/shop_admin/orderpartcancel.php b/adm/shop_admin/orderpartcancel.php index c03721bfc..93a09bc18 100644 --- a/adm/shop_admin/orderpartcancel.php +++ b/adm/shop_admin/orderpartcancel.php @@ -21,7 +21,7 @@ if($od['od_settle_case'] == '계좌이체' && substr($od['od_receipt_time'], 0, if($od['od_receipt_price'] - $od['od_refund_price'] <= 0) alert_close('부분취소 처리할 금액이 없습니다.'); -$g5['title'] = $od['od_settle_case'].' 부분취소'; +$g5['title'] = get_text($od['od_settle_case']).' 부분취소'; include_once(G5_PATH.'/head.sub.php'); // 취소가능금액 @@ -33,7 +33,7 @@ $od_misu = abs($od['od_misu']);
-

부분취소

+

부분취소

diff --git a/adm/shop_admin/orderpartcancelupdate.php b/adm/shop_admin/orderpartcancelupdate.php index a8c443eb7..e86dae80e 100644 --- a/adm/shop_admin/orderpartcancelupdate.php +++ b/adm/shop_admin/orderpartcancelupdate.php @@ -46,7 +46,7 @@ include_once(G5_PATH.'/head.sub.php'); ?> diff --git a/mobile/shop/orderinquiryview.php b/mobile/shop/orderinquiryview.php index 57c1457a1..72edce1c5 100644 --- a/mobile/shop/orderinquiryview.php +++ b/mobile/shop/orderinquiryview.php @@ -280,7 +280,7 @@ if($od['od_pg'] == 'lg') { - + diff --git a/shop/ajax.orderdatasave.php b/shop/ajax.orderdatasave.php index 3c2bfca50..4dfcb2081 100644 --- a/shop/ajax.orderdatasave.php +++ b/shop/ajax.orderdatasave.php @@ -18,6 +18,10 @@ $od_settle_case = isset($_POST['od_settle_case']) ? clean_xss_tags($_POST['od_se // 저장되는 원본에도 정제한 값을 반영한다. $_POST['od_settle_case'] = $od_settle_case; +// 결제환경 정보는 요청값을 사용하지 않고 서버에서 결정한다. +$_POST['od_test'] = $default['de_card_test']; +$_POST['od_ip'] = function_exists('get_real_client_ip') ? get_real_client_ip() : $_SERVER['REMOTE_ADDR']; + if(isset($_POST['pp_id']) && $_POST['pp_id']) { $od_id = get_session('ss_personalpay_id'); $cart_id = 0; @@ -34,8 +38,6 @@ if(isset($_POST['pp_id']) && $_POST['pp_id']) { } else { $od_id = get_session('ss_order_id'); $_POST['sw_direct'] = get_session('ss_direct'); - $_POST['od_test'] = $default['de_card_test']; - $_POST['od_ip'] = $_SERVER['REMOTE_ADDR']; if ($_POST['sw_direct']) { $cart_id = get_session('ss_cart_direct'); diff --git a/shop/orderinquiryview.php b/shop/orderinquiryview.php index a89d2a8b1..20cd8ee43 100644 --- a/shop/orderinquiryview.php +++ b/shop/orderinquiryview.php @@ -278,7 +278,7 @@ if($od['od_pg'] == 'lg') { - + diff --git a/theme/basic/shop/orderinquiryview.php b/theme/basic/shop/orderinquiryview.php index 223a42ff6..b081888bd 100644 --- a/theme/basic/shop/orderinquiryview.php +++ b/theme/basic/shop/orderinquiryview.php @@ -403,7 +403,7 @@ if($od['od_pg'] == 'lg') {
  • 결제방식 - +
  • 결제금액
  • 결제방식
    결제금액
    결제방식
    결제금액