Files
Gnuboard5/shop/ajax.orderdatasave.php
T
thisgun 6571119db6 [KVE-2026-1806] 콘텐츠 include 경로 및 미완료주문 출력 처리 보강
콘텐츠 상단/하단 파일 경로를 저장 전에 먼저 정규화한 뒤 확장자와 위치를
검증하도록 순서를 조정한다. 정규화 과정에서 확장자가 사라져 검증을
우회하던 경로를 차단한다. 실행 직전 bbs/content.php 에서도 승인 확장자와
data 디렉터리 귀결 여부를 다시 확인하는 is_content_include_allowed() 를
적용하고, 콘텐츠 상단/하단 이미지 업로드는 이미지 파일만 허용하도록 검사한다.

미완료주문 상세의 결제방법 출력에 get_text() 인코딩을 적용하고, 임시주문
저장 시 정제한 결제수단 값을 원본에도 반영한다. 개인결제 주문 세션은
결제정보 검증을 통과한 뒤에만 설정한다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 196255d76912531d7e13861821bd59ca15c967d1)
2026-08-24 07:44:22 +00:00

75 lines
2.4 KiB
PHP

<?php
include_once('./_common.php');
// 요청 출처 검증
if (function_exists('check_request_origin')) check_request_origin(G5_SHOP_URL);
if(empty($_POST))
die('정보가 넘어오지 않았습니다.');
// 일정 기간이 경과된 임시 데이터 삭제
/*
$limit_time = date("Y-m-d H:i:s", (G5_SERVER_TIME - 86400 * 1));
$sql = " delete from {$g5['g5_shop_order_data_table']} where dt_type = '1' and dt_time < '$limit_time' ";
sql_query($sql);
*/
$od_settle_case = isset($_POST['od_settle_case']) ? clean_xss_tags($_POST['od_settle_case'], 1, 1) : '';
// 저장되는 원본에도 정제한 값을 반영한다.
$_POST['od_settle_case'] = $od_settle_case;
if(isset($_POST['pp_id']) && $_POST['pp_id']) {
$od_id = get_session('ss_personalpay_id');
$cart_id = 0;
$sql = "select pp_use, pp_tno from {$g5['g5_shop_personalpay_table']} where pp_id = '$od_id' ";
$pp_row = sql_fetch($sql);
if( $pp_row['pp_tno'] ){
die('해당 개인결제는 이미 결제되었습니다.');
} else if( ! $pp_row['pp_use'] ){
die('해당 개인결제는 사용이 금지되어 있습니다.');
}
} 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');
}
else {
$cart_id = get_session('ss_cart_id');
}
if( G5_IS_MOBILE && $default['de_pg_service'] == 'inicis' ){
$_POST['post_cart_id'] = $cart_id;
}
}
$dt_data = base64_encode(serialize($_POST));
// 동일한 주문번호가 있는지 체크
$sql = " select count(*) as cnt from {$g5['g5_shop_order_data_table']} where od_id = '$od_id' ";
$row = sql_fetch($sql);
if($row['cnt'])
sql_query(" delete from {$g5['g5_shop_order_data_table']} where od_id = '$od_id' ");
$default_pg = $default['de_pg_service'];
if( $od_settle_case == '삼성페이' ){ //현재 삼성페이인 경우에는 pg를 inicis로 처리
$default_pg = 'inicis';
}
$sql = " insert into {$g5['g5_shop_order_data_table']}
set od_id = '$od_id',
cart_id = '$cart_id',
mb_id = '{$member['mb_id']}',
dt_pg = '$default_pg',
dt_data = '$dt_data',
dt_time = '".G5_TIME_YMDHIS."' ";
sql_query($sql);
die('');