Skip to content
This repository has been archived by the owner on Jun 24, 2021. It is now read-only.

Commit

Permalink
보안패치 및 장바구니 재고 체크 방법 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
chicpro committed Nov 6, 2014
1 parent 0cfc96d commit 53821b3
Show file tree
Hide file tree
Showing 20 changed files with 338 additions and 138 deletions.
3 changes: 3 additions & 0 deletions adm/shop_admin/itemform.php
Expand Up @@ -48,6 +48,9 @@
$sql = " select * from {$g5['g5_shop_item_table']} where it_id = '$it_id' ";
$it = sql_fetch($sql);

if(!$it)
alert('상품정보가 존재하지 않습니다.');

if (!$ca_id)
$ca_id = $it['ca_id'];

Expand Down
2 changes: 1 addition & 1 deletion adm/shop_admin/itemqaform.php
Expand Up @@ -12,7 +12,7 @@
$iq = sql_fetch($sql);
if (!$iq['iq_id']) alert('등록된 자료가 없습니다.');

$name = get_sideview($is['mb_id'], get_text($iq['iq_name']), $is['mb_email'], $is['mb_homepage']);
$name = get_sideview($iq['mb_id'], get_text($iq['iq_name']), $iq['mb_email'], $iq['mb_homepage']);

$g5['title'] = '상품문의';
include_once (G5_ADMIN_PATH.'/admin.head.php');
Expand Down
8 changes: 4 additions & 4 deletions adm/shop_admin/orderdeliveryexcel.php
Expand Up @@ -40,11 +40,11 @@

$worksheet->write($i, 0, ' '.$row['od_id']);
$worksheet->write($i, 1, $row['od_name']);
$worksheet->write($i, 2, $row['od_tel']);
$worksheet->write($i, 3, $row['od_hp']);
$worksheet->write($i, 2, ' '.$row['od_tel']);
$worksheet->write($i, 3, ' '.$row['od_hp']);
$worksheet->write($i, 4, $row['od_b_name']);
$worksheet->write($i, 5, $row['od_b_tel']);
$worksheet->write($i, 6, $row['od_b_hp']);
$worksheet->write($i, 5, ' '.$row['od_b_tel']);
$worksheet->write($i, 6, ' '.$row['od_b_hp']);
$worksheet->write($i, 7, print_address($row['od_b_addr1'], $row['od_b_addr2'], $row['od_b_addr3'], $row['od_b_addr_jibeon']));
$worksheet->write($i, 8, $row['od_delivery_company']);
$worksheet->write($i, 9, $row['od_invoice']);
Expand Down
10 changes: 0 additions & 10 deletions adm/shop_admin/orderform.php
Expand Up @@ -10,16 +10,6 @@
$g5['title'] = "주문 내역 수정";
include_once(G5_ADMIN_PATH.'/admin.head.php');

//------------------------------------------------------------------------------
// 설정 시간이 지난 주문서 없는 장바구니 자료 삭제
//------------------------------------------------------------------------------
$keep_term = $default['de_cart_keep_term'];
if (!$keep_term) $keep_term = 15; // 기본값 15일
$beforetime = date('Y-m-d', ( G5_SERVER_TIME - (86400 * $keep_term) ) );
$sql = " delete from {$g5['g5_shop_cart_table']} where ct_status = '쇼핑' and substring(ct_time, 1, 10) < '$beforetime' ";
sql_query($sql);
//------------------------------------------------------------------------------


// 완료된 주문에 포인트를 적립한다.
save_order_point("완료");
Expand Down
7 changes: 7 additions & 0 deletions adm/shop_admin/orderlistdelete.php
Expand Up @@ -13,11 +13,18 @@
$od = sql_fetch(" select * from {$g5['g5_shop_order_table']} where od_id = '$od_id' ");
if (!$od) continue;

// 주문상태가 주문이 아니면 건너뜀
if($od['od_status'] != '주문') continue;

$data = serialize($od);

$sql = " insert {$g5['g5_shop_order_delete_table']} set de_key = '$od_id', de_data = '".addslashes($data)."', mb_id = '{$member['mb_id']}', de_ip = '{$_SERVER['REMOTE_ADDR']}', de_datetime = '".G5_TIME_YMDHIS."' ";
sql_query($sql, true);

// cart 테이블의 상품 상태를 삭제로 변경
$sql = " update {$g5['g5_shop_cart_table']} set ct_status = '삭제' where od_id = '$od_id' and ct_status = '주문' ";
sql_query($sql);

$sql = " delete from {$g5['g5_shop_order_table']} where od_id = '$od_id' ";
sql_query($sql);
}
Expand Down
4 changes: 2 additions & 2 deletions adm/shop_admin/orderprintresult.php
Expand Up @@ -212,8 +212,8 @@ function conv_telno($t)
$worksheet->write($i, 0, $row['od_b_zip1'].'-'.$row['od_b_zip2']);
$worksheet->write($i, 1, print_address($row['od_b_addr1'], $row['od_b_addr2'], $row['od_b_addr3'], $row['od_b_addr_jibeon']));
$worksheet->write($i, 2, $row['od_b_name']);
$worksheet->write($i, 3, $row['od_b_tel']);
$worksheet->write($i, 4, $row['od_b_hp']);
$worksheet->write($i, 3, ' '.$row['od_b_tel']);
$worksheet->write($i, 4, ' '.$row['od_b_hp']);
$worksheet->write($i, 5, $row['it_name']);
$worksheet->write($i, 6, $row['ct_qty']);
$worksheet->write($i, 7, $row['ct_option']);
Expand Down
109 changes: 59 additions & 50 deletions bbs/register_form_update.php
Expand Up @@ -20,7 +20,16 @@
alert('자동등록방지 숫자가 틀렸습니다.');
}

$mb_id = trim($_POST['mb_id']);
if($w == 'u')
$mb_id = isset($_SESSION['ss_mb_id']) ? trim($_SESSION['ss_mb_id']) : '';
else if($w == '')
$mb_id = trim($_POST['mb_id']);
else
alert('잘못된 접근입니다', G5_URL);

if(!$mb_id)
alert('회원아이디 값이 없습니다. 올바른 방법으로 이용해 주십시오.');

$mb_password = trim($_POST['mb_password']);
$mb_password_re = trim($_POST['mb_password_re']);
$mb_name = trim($_POST['mb_name']);
Expand Down Expand Up @@ -123,50 +132,6 @@
// 사용자 코드 실행
@include_once($member_skin_path.'/register_form_update.head.skin.php');

$mb_dir = G5_DATA_PATH.'/member/'.substr($mb_id,0,2);

// 아이콘 삭제
if (isset($_POST['del_mb_icon'])) {
@unlink($mb_dir.'/'.$mb_id.'.gif');
}

$msg = "";

// 아이콘 업로드
$mb_icon = '';
if (isset($_FILES['mb_icon']) && is_uploaded_file($_FILES['mb_icon']['tmp_name'])) {
if (preg_match("/(\.gif)$/i", $_FILES['mb_icon']['name'])) {
// 아이콘 용량이 설정값보다 이하만 업로드 가능
if ($_FILES['mb_icon']['size'] <= $config['cf_member_icon_size']) {
@mkdir($mb_dir, G5_DIR_PERMISSION);
@chmod($mb_dir, G5_DIR_PERMISSION);
$dest_path = $mb_dir.'/'.$mb_id.'.gif';
move_uploaded_file($_FILES['mb_icon']['tmp_name'], $dest_path);
chmod($dest_path, G5_FILE_PERMISSION);
if (file_exists($dest_path)) {
//=================================================================\
// 090714
// gif 파일에 악성코드를 심어 업로드 하는 경우를 방지
// 에러메세지는 출력하지 않는다.
//-----------------------------------------------------------------
$size = getimagesize($dest_path);
if ($size[2] != 1) // gif 파일이 아니면 올라간 이미지를 삭제한다.
@unlink($dest_path);
else
// 아이콘의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 아이콘 삭제
if ($size[0] > $config['cf_member_icon_width'] || $size[1] > $config['cf_member_icon_height'])
@unlink($dest_path);
//=================================================================\
}
} else {
$msg .= '회원아이콘을 '.number_format($config['cf_member_icon_size']).'바이트 이하로 업로드 해주십시오.';
}

} else {
$msg .= $_FILES['mb_icon']['name'].'은(는) gif 파일이 아닙니다.';
}
}

//===============================================================
// 본인확인
//---------------------------------------------------------------
Expand Down Expand Up @@ -213,7 +178,6 @@
//===============================================================

if ($w == '') {

$sql = " insert into {$g5['member_table']}
set mb_id = '{$mb_id}',
mb_password = '".sql_password($mb_password)."',
Expand Down Expand Up @@ -303,11 +267,10 @@
set_session('ss_mb_reg', $mb_id);

} else if ($w == 'u') {

if (!trim($_SESSION['ss_mb_id']))
alert('로그인 되어 있지 않습니다.');

if ($_SESSION['ss_mb_id'] != $mb_id)
if (trim($_POST['mb_id']) != $mb_id)
alert("로그인된 정보와 수정하려는 정보가 틀리므로 수정할 수 없습니다.\\n만약 올바르지 않은 방법을 사용하신다면 바로 중지하여 주십시오.");

$sql_password = "";
Expand Down Expand Up @@ -368,6 +331,52 @@
}


// 회원 아이콘
$mb_dir = G5_DATA_PATH.'/member/'.substr($mb_id,0,2);

// 아이콘 삭제
if (isset($_POST['del_mb_icon'])) {
@unlink($mb_dir.'/'.$mb_id.'.gif');
}

$msg = "";

// 아이콘 업로드
$mb_icon = '';
if (isset($_FILES['mb_icon']) && is_uploaded_file($_FILES['mb_icon']['tmp_name'])) {
if (preg_match("/(\.gif)$/i", $_FILES['mb_icon']['name'])) {
// 아이콘 용량이 설정값보다 이하만 업로드 가능
if ($_FILES['mb_icon']['size'] <= $config['cf_member_icon_size']) {
@mkdir($mb_dir, G5_DIR_PERMISSION);
@chmod($mb_dir, G5_DIR_PERMISSION);
$dest_path = $mb_dir.'/'.$mb_id.'.gif';
move_uploaded_file($_FILES['mb_icon']['tmp_name'], $dest_path);
chmod($dest_path, G5_FILE_PERMISSION);
if (file_exists($dest_path)) {
//=================================================================\
// 090714
// gif 파일에 악성코드를 심어 업로드 하는 경우를 방지
// 에러메세지는 출력하지 않는다.
//-----------------------------------------------------------------
$size = getimagesize($dest_path);
if ($size[2] != 1) // gif 파일이 아니면 올라간 이미지를 삭제한다.
@unlink($dest_path);
else
// 아이콘의 폭 또는 높이가 설정값 보다 크다면 이미 업로드 된 아이콘 삭제
if ($size[0] > $config['cf_member_icon_width'] || $size[1] > $config['cf_member_icon_height'])
@unlink($dest_path);
//=================================================================\
}
} else {
$msg .= '회원아이콘을 '.number_format($config['cf_member_icon_size']).'바이트 이하로 업로드 해주십시오.';
}

} else {
$msg .= $_FILES['mb_icon']['name'].'은(는) gif 파일이 아닙니다.';
}
}


// 인증메일 발송
if ($config['cf_use_email_certify'] && $old_email != $mb_email) {
$subject = '['.$config['cf_title'].'] 인증확인 메일입니다.';
Expand Down Expand Up @@ -442,14 +451,14 @@
if ($msg)
echo '<script>alert(\''.$msg.'\');</script>';

if ($w == "") {
if ($w == '') {
goto_url(G5_HTTP_BBS_URL.'/register_result.php');
} else if ($w == 'u') {
$row = sql_fetch(" select mb_password from {$g5['member_table']} where mb_id = '{$member['mb_id']}' ");
$tmp_password = $row['mb_password'];

if ($old_email != $mb_email && $config['cf_use_email_certify']) {
set_session("ss_mb_id", "");
set_session('ss_mb_id', '');
alert('회원 정보가 수정 되었습니다.\n\nE-mail 주소가 변경되었으므로 다시 인증하셔야 합니다.', G5_URL);
} else {
alert('회원 정보가 수정 되었습니다.', G5_URL);
Expand Down
2 changes: 1 addition & 1 deletion bbs/write.php
Expand Up @@ -408,7 +408,7 @@

$action_url = https_url(G5_BBS_DIR)."/write_update.php";

echo '<!-- skin : '.(G5_IS_MOBEILE ? $board['bo_mobile_skin'] : $board['bo_skin']).' -->';
echo '<!-- skin : '.(G5_IS_MOBILE ? $board['bo_mobile_skin'] : $board['bo_skin']).' -->';
include_once ($board_skin_path.'/write.skin.php');

include_once('./board_tail.php');
Expand Down
4 changes: 4 additions & 0 deletions extend/shop.extend.php
Expand Up @@ -131,6 +131,10 @@
define('G5_CASH_RECEIPT_URL', 'https://admin.kcp.co.kr/Modules/Service/Cash/Cash_Bill_Common_View.jsp?term_id=PGNW');
}

// 주문폼의 상품이 재고 차감에 포함되는 기준 시간설정
// 0 이면 재고 차감에 계속 포함됨
define('G5_CART_STOCK_LIMIT', 3);

// 아이코드 코인 최소금액 설정
// 코인 잔액이 설정 금액보다 작을 때는 주문시 SMS 발송 안함
define('G5_ICODE_COIN', 100);
Expand Down
1 change: 1 addition & 0 deletions install/gnuboard5shop.sql
Expand Up @@ -56,6 +56,7 @@ CREATE TABLE IF NOT EXISTS `g5_shop_cart` (
`ct_send_cost` tinyint(4) NOT NULL DEFAULT '0',
`ct_direct` tinyint(4) NOT NULL DEFAULT '0',
`ct_select` tinyint(4) NOT NULL DEFAULT '0',
`ct_select_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`ct_id`),
KEY `od_id` (`od_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Expand Down
13 changes: 13 additions & 0 deletions js/shop.order.js
@@ -0,0 +1,13 @@
var order_stock_check = function() {
var result = "";
$.ajax({
type: "POST",
url: g5_url+"/shop/ajax.orderstock.php",
cache: false,
async: false,
success: function(data) {
result = data;
}
});
return result;
}
48 changes: 39 additions & 9 deletions lib/shop.lib.php
Expand Up @@ -336,10 +336,6 @@ function get_cart_count($cart_id)
global $g5, $default;

$sql = " select count(ct_id) as cnt from {$g5['g5_shop_cart_table']} where od_id = '$cart_id' ";
if($default['de_cart_keep_term']) {
$ctime = date('Y-m-d', G5_SERVER_TIME - ($default['de_cart_keep_term'] * 86400));
$sql .= " and substring(ct_time, 1, 10) >= '$ctime' ";
}
$row = sql_fetch($sql);
$cnt = (int)$row['cnt'];
return $cnt;
Expand Down Expand Up @@ -1342,11 +1338,6 @@ function set_cart_id($direct)
where mb_id = '{$member['mb_id']}'
and ct_direct = '0'
and ct_status = '쇼핑' ";
if($default['de_cart_keep_term']) {
$ctime = date('Y-m-d', G5_SERVER_TIME - ($default['de_cart_keep_term'] * 86400));
$sql .= " and substring(ct_time, 1, 10) >= '$ctime' ";
}

sql_query($sql);
}
}
Expand Down Expand Up @@ -2142,6 +2133,45 @@ function get_itemuselist_thumbnail($it_id, $contents, $thumb_width, $thumb_heigh
return $img;
}

// 장바구니 상품삭제
function cart_item_clean()
{
global $g5, $default;

// 장바구니 보관일
$keep_term = $default['de_cart_keep_term'];
if(!$keep_term)
$keep_term = 15; // 기본값 15일

// ct_select_time이 기준시간 이상 경과된 경우 변경
if(defined('G5_CART_STOCK_LIMIT'))
$cart_stock_limit = G5_CART_STOCK_LIMIT;
else
$cart_stock_limit = 3;

$stocktime = 0;
if($cart_stock_limit > 0) {
if($cart_stock_limit > $keep_term * 24)
$cart_stock_limit = $keep_term * 24;

$stocktime = G5_SERVER_TIME - (3600 * $cart_stock_limit);
$sql = " update {$g5['g5_shop_cart_table']}
set ct_select = '0'
where ct_select = '1'
and ct_status = '쇼핑'
and UNIX_TIMESTAMP(ct_select_time) < '$stocktime' ";
sql_query($sql);
}

// 설정 시간이상 경과된 상품 삭제
$statustime = G5_SERVER_TIME - (86400 * $keep_term);

$sql = " delete from {$g5['g5_shop_cart_table']}
where ct_status = '쇼핑'
and UNIX_TIMESTAMP(ct_time) < '$statustime' ";
sql_query($sql);
}

//==============================================================================
// 쇼핑몰 라이브러리 모음 끝
//==============================================================================
Expand Down
11 changes: 7 additions & 4 deletions mobile/shop/orderform.php
Expand Up @@ -65,10 +65,6 @@
from {$g5['g5_shop_cart_table']} a left join {$g5['g5_shop_item_table']} b on ( a.it_id = b.it_id )
where a.od_id = '$s_cart_id'
and a.ct_select = '1' ";
if($default['de_cart_keep_term']) {
$ctime = date('Y-m-d', G5_SERVER_TIME - ($default['de_cart_keep_term'] * 86400));
$sql .= " and substring(a.ct_time, 1, 10) >= '$ctime' ";
}
$sql .= " group by a.it_id ";
$sql .= " order by a.ct_id ";
$result = sql_query($sql);
Expand Down Expand Up @@ -1134,6 +1130,13 @@ function calculate_tax()

function pay_approval()
{
// 재고체크
var stock_msg = order_stock_check();
if(stock_msg != "") {
alert(stock_msg);
return false;
}

var f = document.sm_form;
var pf = document.forderform;

Expand Down
8 changes: 7 additions & 1 deletion orderupgrade.php
Expand Up @@ -38,9 +38,15 @@
where ct_id = '{$row['ct_id']}' ";
sql_query($sql);
}
}

echo '<p>장바구니 테이블 업그레이드 완료!</p>';
// 장바구니 상품 주문폼 등록시간 기록 필드 추가
if(!sql_query(" select ct_select_time from {$g5['g5_shop_cart_table']} limit 1 ", false)) {
sql_query(" ALTER TABLE `{$g5['g5_shop_cart_table']}`
ADD `ct_select_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' AFTER `ct_select` ", true);
}

echo '<p>장바구니 테이블 업그레이드 완료!</p>';

include_once(G5_PATH.'/tail.sub.php');
?>

0 comments on commit 53821b3

Please sign in to comment.