콘텐츠 상단/하단 파일 경로를 저장 전에 먼저 정규화한 뒤 확장자와 위치를 검증하도록 순서를 조정한다. 정규화 과정에서 확장자가 사라져 검증을 우회하던 경로를 차단한다. 실행 직전 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)
75 lines
2.4 KiB
PHP
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(''); |