bbs 의 하위 폴더를 plugin 폴더 밑으로 모두 이동

This commit is contained in:
gnuboard
2013-04-10 11:21:22 +09:00
parent 072276da8b
commit d3d49e6a1e
316 changed files with 4 additions and 4 deletions

3
plugin/kcp/_common.php Normal file
View File

@ -0,0 +1,3 @@
<?
include_once('../../common.php');
?>

BIN
plugin/kcp/bin/ct_cli Executable file

Binary file not shown.

View File

@ -0,0 +1,48 @@
<?
include_once('./_common.php');
// /home/kcpcert_enc ( 서버상 bin 폴더 이전까지 경로)
$home_dir = G4_PLUGIN_PATH.'/kcp'; // ct_cli 절대경로 ( bin 전까지 )
// DI 를 위한 중복확인 식별 아이디
//web_siteid 값이 없으면 KCP 에서 지정한 값으로 설정됨
$web_siteid = '';
if($config['cf_kcpcert_site_cd'] && $config['cf_kcpcert_site_cd'] != 'S6186') { // 실인증
$site_cd = $config['cf_kcpcert_site_cd'];
$cert_url = 'https://cert.kcp.co.kr/kcp_cert/cert_view.jsp';
} else { // 테스트인증
$site_cd = 'S6186';
$cert_url = 'https://testcert.kcp.co.kr/kcp_cert/cert_view.jsp';
}
if(!$site_cd)
alert('KCP 휴대폰인증 사이트코드가 없습니다.\\관리자 > 기본환경설정에 사이트코드를 입력해 주십시오.', G4_URL);
// KCP 인증 라이브러리
require G4_PLUGIN_PATH.'/kcp/lib/ct_cli_lib.php';
/* ============================================================================== */
/* = null 값을 처리하는 메소드 = */
/* = -------------------------------------------------------------------------- = */
function f_get_parm_str( $val )
{
if ( $val == null ) $val = "";
if ( $val == "" ) $val = "";
return $val;
}
//!!중요 해당 함수는 year, month, day 변수가 null 일 경우 00 으로 치환합니다
function f_get_parm_int( $val )
{
$ret_val = "";
if ( $val == null ) $val = "00";
if ( $val == "" ) $val = "00";
$ret_val = strlen($val) == 1? ("0" . $val) : $val;
return $ret_val;
}
/* ============================================================================== */
?>

View File

@ -0,0 +1,81 @@
<?
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// kcp 휴대폰인증파일
include_once(G4_PLUGIN_PATH.'/kcp/kcpcert_config.php');
if(!$ordr_idxx = get_session('ss_uniqid'))
$ordr_idxx = get_uniqid();
?>
<form name="form_auth" method="post" target="auth_popup" action="<?=$cert_url?>">
<!-- 유저네임 -->
<input type="hidden" name="user_name" value="" />
<!-- 주문번호 -->
<input type="hidden" name="ordr_idxx" value="<?=$ordr_idxx?>">
<!-- 요청종류 -->
<input type="hidden" name="req_tx" value="cert"/>
<!-- 인증종류 -->
<input type="hidden" name="cert_type" value="01"/>
<!-- 웹사이트아이디 -->
<input type="hidden" name="web_siteid" value=""/>
<!-- 노출 통신사 default 처리시 아래의 주석을 해제하고 사용하십시요
SKT : SKT , KT : KTF , LGU+ : LGT
<input type="hidden" name="fix_commid" value="KTF"/>
-->
<!-- 사이트코드 -->
<input type="hidden" name="site_cd" value="<?= $site_cd ?>" />
<!-- Ret_URL : 인증결과 리턴 페이지 ( 가맹점 URL 로 설정해 주셔야 합니다. ) -->
<input type="hidden" name="Ret_URL" value="<?=G4_PLUGIN_PATH?>/kcp/kcpcert_result.php" />
<!-- cert_otp_use 필수 ( 메뉴얼 참고)
Y : 실명 확인 + OTP 점유 확인 , N : 실명 확인 only
-->
<input type="hidden" name="cert_otp_use" value="Y"/>
<!-- cert_enc_use 필수 (고정값 : 메뉴얼 참고) -->
<input type="hidden" name="cert_enc_use" value="Y"/>
<input type="hidden" name="res_cd" value=""/>
<input type="hidden" name="res_msg" value=""/>
<!-- up_hash 검증 을 위한 필드 -->
<input type="hidden" name="veri_up_hash" value=""/>
<!-- 가맹점 사용 필드 (인증완료시 리턴)-->
<input type="hidden" name="param_opt_1" value="opt1"/>
<input type="hidden" name="param_opt_2" value="opt2"/>
<input type="hidden" name="param_opt_3" value="opt3"/>
</form>
<script>
// 인증창 호출 함수
function auth_type_check(user_name)
{
var auth_form = document.form_auth;
auth_form.user_name.value = encodeURIComponent(user_name);
if( auth_form.ordr_idxx.value == "" )
{
alert( "주문번호는 필수 입니다." );
return false;
}
else
{
if( ( navigator.userAgent.indexOf("Android") > - 1 || navigator.userAgent.indexOf("iPhone") > - 1 ) == false ) // 스마트폰이 아닌경우
{
var return_gubun;
var width = 410;
var height = 500;
var leftpos = screen.width / 2 - ( width / 2 );
var toppos = screen.height / 2 - ( height / 2 );
var winopts = "width=" + width + ", height=" + height + ", toolbar=no,status=no,statusbar=no,menubar=no,scrollbars=no,resizable=no";
var position = ",left=" + leftpos + ", top=" + toppos;
var AUTH_POP = window.open('','auth_popup', winopts + position);
}
auth_form.submit();
}
}
</script>

View File

@ -0,0 +1,148 @@
<?
include_once('./kcpcert_config.php');
// utf-8로 넘어돈 post 값을 euc-kr 로 변경
$_POST = array_map("iconv_euckr", $_POST);
// UTF-8 환경에서 해시 데이터 오류를 막기 위한 코드
$def_locale = setlocale(LC_CTYPE, 0);
$locale_change = false;
if(preg_match("/utf[\-]?8/i", $def_locale)) {
setlocale(LC_CTYPE, 'ko_KR.euc-kr');
$locale_change = true;
}
$req_tx = "";
$site_cd = "";
$ordr_idxx = "";
$year = "";
$month = "";
$day = "";
$user_name = "";
$sex_code = "";
$local_code = "";
$up_hash = "";
/*------------------------------------------------------------------------*/
/* :: 전체 파라미터 남기기 */
/*------------------------------------------------------------------------*/
$ct_cert = new C_CT_CLI;
$ct_cert->mf_clear();
// request 로 넘어온 값 처리
$key = array_keys($_POST);
$sbParam ="";
for($i=0; $i<count($key); $i++)
{
$nmParam = $key[$i];
$valParam = $_POST[$nmParam];
if ( $nmParam == "site_cd" )
{
$site_cd = f_get_parm_str ( $valParam );
}
if ( $nmParam == "req_tx" )
{
$req_tx = f_get_parm_str ( $valParam );
}
if ( $nmParam == "ordr_idxx" )
{
$ordr_idxx = f_get_parm_str ( $valParam );
}
if ( $nmParam == "user_name" )
{
$user_name = f_get_parm_str ( $valParam );
}
if ( $nmParam == "year" )
{
$year = f_get_parm_int ( $valParam );
}
if ( $nmParam == "month" )
{
$month = f_get_parm_int ( $valParam );
}
if ( $nmParam == "day" )
{
$day = f_get_parm_int ( $valParam );
}
if ( $nmParam == "sex_code" )
{
$sex_code = f_get_parm_str ( $valParam );
}
if ( $nmParam == "local_code" )
{
$local_code = f_get_parm_str ( $valParam );
}
// 인증창으로 넘기는 form 데이터 생성 필드
$sbParam .= "<input type='hidden' name='" . $nmParam . "' value='" . f_get_parm_str( $valParam ) . "'/>";
}
if ( $req_tx == "cert" )
{
// !!up_hash 데이터 생성시 주의 사항
// year , month , day 가 비어 있는 경우 "00" , "00" , "00" 으로 설정이 됩니다
// 그외의 값은 없을 경우 ""(null) 로 세팅하시면 됩니다.
// up_hash 데이터 생성시 site_cd 와 ordr_idxx 는 필수 값입니다.
$hash_data = $site_cd .
$ordr_idxx .
$user_name .
f_get_parm_int ( $year ) .
f_get_parm_int ( $month ) .
f_get_parm_int ( $day ) .
$sex_code .
$local_code;
$up_hash = $ct_cert->make_hash_data( $home_dir, $hash_data );
// 인증창으로 넘기는 form 데이터 생성 필드 ( up_hash )
$sbParam .= "<input type='hidden' name='up_hash' value='" . $up_hash . "'/>";
}
$ct_cert->mf_clear();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<title>*** KCP Online Payment System [PHP Version] ***</title>
<script type="text/javascript">
window.onload=function()
{
var frm = document.form_auth;
// 인증 요청 시 호출 함수
if ( frm.req_tx.value == "cert" )
{
opener.document.form_auth.veri_up_hash.value = frm.up_hash.value; // up_hash 데이터 검증을 위한 필드
frm.action="<?=$cert_url?>";
frm.submit();
}
}
</script>
</head>
<body oncontextmenu="return false;" ondragstart="return false;" onselectstart="return false;">
<form name="form_auth" method="post">
<?= $sbParam ?>
</form>
</body>
</html>
<?
if($locale_change)
setlocale(LC_CTYPE, $def_locale);
?>

View File

@ -0,0 +1,181 @@
<?
include_once('./kcpcert_config.php');
$site_cd = "";
$ordr_idxx = "";
$cert_no = "";
$cert_enc_use = "";
$enc_info = "";
$enc_data = "";
$req_tx = "";
$enc_cert_data = "";
$cert_info = "";
$tran_cd = "";
$res_cd = "";
$res_msg = "";
$dn_hash = "";
/*------------------------------------------------------------------------*/
/* :: 전체 파라미터 남기기 */
/*------------------------------------------------------------------------*/
// request 로 넘어온 값 처리
$key = array_keys($_POST);
$sbParam ="";
for($i=0; $i<count($key); $i++)
{
$nmParam = $key[$i];
$valParam = $_POST[$nmParam];
if ( $nmParam == "site_cd" )
{
$site_cd = f_get_parm_str ( $valParam );
}
if ( $nmParam == "ordr_idxx" )
{
$ordr_idxx = f_get_parm_str ( $valParam );
}
if ( $nmParam == "res_cd" )
{
$res_cd = f_get_parm_str ( $valParam );
}
if ( $nmParam == "cert_enc_use" )
{
$cert_enc_use = f_get_parm_str ( $valParam );
}
if ( $nmParam == "req_tx" )
{
$req_tx = f_get_parm_str ( $valParam );
}
if ( $nmParam == "cert_no" )
{
$cert_no = f_get_parm_str ( $valParam );
}
if ( $nmParam == "enc_cert_data" )
{
$enc_cert_data = f_get_parm_str ( $valParam );
}
if ( $nmParam == "dn_hash" )
{
$dn_hash = f_get_parm_str ( $valParam );
}
// 부모창으로 넘기는 form 데이터 생성 필드
$sbParam .= "<input type='hidden' name='" . $nmParam . "' value='" . f_get_parm_str( $valParam ) . "'/>";
}
$ct_cert = new C_CT_CLI;
$ct_cert->mf_clear();
$g4['title'] = '휴대폰인증 결과';
include_once(G4_PATH.'/head.sub.php');
// 결과 처리
if( $cert_enc_use == "Y" )
{
if( $res_cd == "0000" )
{
// dn_hash 검증
// KCP 가 리턴해 드리는 dn_hash 와 사이트 코드, 주문번호 , 인증번호를 검증하여
// 해당 데이터의 위변조를 방지합니다
$veri_str = $site_cd.$ordr_idxx.$cert_no; // 사이트 코드 + 주문번호 + 인증거래번호
if ( $ct_cert->check_valid_hash ( $home_dir , $dn_hash , $veri_str ) != "1" )
{
// 검증 실패시 처리 영역
echo "dn_hash 변조 위험있음";
exit;
// 오류 처리 ( dn_hash 변조 위험있음)
}
// 가맹점 DB 처리 페이지 영역
// 인증데이터 복호화 함수
// 해당 함수는 암호화된 enc_cert_data 를
// site_cd 와 cert_no 를 가지고 복화화 하는 함수 입니다.
// 정상적으로 복호화 된경우에만 인증데이터를 가져올수 있습니다.
$opt = "1" ; // 복호화 인코딩 옵션 ( UTF - 8 사용시 "1" )
$ct_cert->decrypt_enc_cert( $home_dir , $site_cd , $cert_no , $enc_cert_data , $opt );
$comm_id = $ct_cert->mf_get_key_value("comm_id" ); // 이동통신사 코드
$phone_no = $ct_cert->mf_get_key_value("phone_no" ); // 전화번호
$user_name = $ct_cert->mf_get_key_value("user_name" ); // 이름
$birth_day = $ct_cert->mf_get_key_value("birth_day" ); // 생년월일
$sex_code = $ct_cert->mf_get_key_value("sex_code" ); // 성별코드
$local_code = $ct_cert->mf_get_key_value("local_code" ); // 내/외국인 정보
$ci = $ct_cert->mf_get_key_value("ci" ); // CI
$di = $ct_cert->mf_get_key_value("di" ); // DI 중복가입 확인값
$ci_url = urldecode( $ct_cert->mf_get_key_value("ci" ) ); // CI
$di_url = urldecode( $ct_cert->mf_get_key_value("di" ) ); // DI 중복가입 확인값
$dec_res_cd = $ct_cert->mf_get_key_value("res_cd" ); // 암호화된 결과코드
$dec_mes_msg = $ct_cert->mf_get_key_value("res_msg" ); // 암호화된 결과메시지
// 정상인증인지 체크
if(!$phone_no)
alert_close('정상적인 인증이 아닙니다. 올바른 방법으로 이용해 주세요.');
// hash 데이터
$md5_cert_no = md5($cert_no);
$hash_data = md5($phone_no.$user_name.$md5_cert_no);
set_session('ss_kcpcert_hash', $hash_data);
// 성인인증결과
$adult_day = date("Ymd", strtotime("-19 years", G4_SERVER_TIME));
if((int)$birth_day <= (int)$adult_day)
set_session('ss_adult_check', 'Y');
}
else if( $res_cd != "0000" )
{
// 인증실패
alert_close('코드 : '.$_POST['res_cd'].' '.urldecode($_POST['res_msg']));
exit;
}
}
else if( $cert_enc_use != "Y" )
{
// 암호화 인증 안함
}
$ct_cert->mf_clear();
// 휴대폰번호 포맷변경
$phone_no = preg_replace("/[^0-9]/", "", $phone_no);
$hp_len = strlen($phone_no);
if($hp_len == 10)
$phone_no = preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "\\1-\\2-\\3", $phone_no);
else if($hp_len == 11)
$phone_no = preg_replace("/([0-9]{3})([0-9]{4})([0-9]{4})/", "\\1-\\2-\\3", $phone_no);
?>
<script>
$(function() {
var $opener = window.opener;
// 인증정보
$opener.$("input[name=mb_hp]").val("<?=$phone_no?>");
$opener.$("input[name=kcpcert_no]").val("<?=$md5_cert_no?>");
$opener.$("input[name=kcpcert_time]").val("<?=G4_TIME_YMDHIS?>");
window.close();
});
</script>
<?php
include_once(G4_PATH.'/tail.sub.php');
?>

View File

@ -0,0 +1,89 @@
<?php
/* ====================================================================== */
/* = PAGE : <20><><EFBFBD><EFBFBD> PHP <20><><EFBFBD>̺귯<CCBA><EAB7AF> 1.0.1 = */
/* = ------------------------------------------------------------------ = */
/* = Copyright (c) 2012 KCP Inc. All Rights Reserverd. = */
/* ====================================================================== */
/* ====================================================================== */
/* = <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> CLASS = */
/* ====================================================================== */
class C_CT_CLI
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>κ<EFBFBD>
var $m_dec_data;
// <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD>
function mf_clear()
{
$this->m_dec_data="";
}
// hash ó<><C3B3> <20><><EFBFBD><EFBFBD>
function make_hash_data( $home_dir , $str )
{
$hash_data = $this -> mf_exec( $home_dir . "/bin/ct_cli" ,
"lf_CT_CLI__make_hash_data",
$str
);
if ( $hash_data == "" ) { $hash_data = "HS01"; }
return $hash_data;
}
// dn_hash üũ <20>Լ<EFBFBD>
function check_valid_hash ($home_dir , $hash_data , $str )
{
$ret_val = $this -> mf_exec( $home_dir . "/bin/ct_cli" ,
"lf_CT_CLI__check_valid_hash" ,
$hash_data ,
$str
);
if ( $ret_val == "" ) { $ret_val = "HS02"; }
return $ret_val;
}
// <20><>ȣȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣȭ
function decrypt_enc_cert ( $home_dir, $site_cd , $cert_no , $enc_cert_data , $opt)
{
$dec_data = $this -> mf_exec( $home_dir . "/bin/ct_cli" ,
"lf_CT_CLI__decrypt_enc_cert" ,
$site_cd ,
$cert_no ,
$enc_cert_data ,
$opt
);
if ( $dec_data == "" ) { $dec_data = "HS03"; }
parse_str( str_replace( chr( 31 ), "&", $dec_data ), $this->m_dec_data );
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> get data
function mf_get_key_value( $name )
{
return $this->m_dec_data[ $name ];
}
function mf_exec()
{
$arg = func_get_args();
if ( is_array( $arg[0] ) ) $arg = $arg[0];
$exec_cmd = array_shift( $arg );
while ( list(,$i) = each($arg) )
{
$exec_cmd .= " " . escapeshellarg( $i );
}
$rt = exec( $exec_cmd );
return $rt;
}
}
?>