회원정보찾기 : KGB 휴대폰/아이핀 인증 관련 수정
This commit is contained in:
155
plugin/okname/find_hpcert2.php
Normal file
155
plugin/okname/find_hpcert2.php
Normal file
@ -0,0 +1,155 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$check_arrays = array('exe', 'keypath', 'memId', 'endPointURL', 'endPointUrl', 'logPath');
|
||||
|
||||
foreach($check_arrays as $key){
|
||||
if( isset($_REQUEST[$key]) && $_REQUEST[$key] ){
|
||||
die('bad request');
|
||||
}
|
||||
|
||||
$$key = '';
|
||||
}
|
||||
|
||||
// KISA 취약점 내용(KVE-2018-0291) hpcert1.php의 $cmd 함수에 대한 인자 값은 hpcert_config.php 파일에서 설정되나, 이를 다른 페이지에서 포함한 뒤 호출할 시 임의 값 설정 가능
|
||||
// 이에 include_once 를 require 로 수정함
|
||||
require('./hpcert.config.php');
|
||||
/**************************************************************************
|
||||
파일명 : safe_hs_cert3.php
|
||||
|
||||
생년월일 본인 확인서비스 결과 화면(return url)
|
||||
**************************************************************************/
|
||||
|
||||
/* 공통 리턴 항목 */
|
||||
//$idcfMbrComCd = $_REQUEST['idcf_mbr_com_cd']; // 고객사코드
|
||||
$idcfMbrComCd = $memId;
|
||||
$hsCertSvcTxSeqno = isset($_REQUEST['hs_cert_svc_tx_seqno']) ? $_REQUEST['hs_cert_svc_tx_seqno'] : ''; // 거래번호
|
||||
$rqstSiteNm = isset($_REQUEST['rqst_site_nm']) ? $_REQUEST['rqst_site_nm'] : ''; // 접속도메인
|
||||
$hsCertRqstCausCd = isset($_REQUEST['hs_cert_rqst_caus_cd']) ? $_REQUEST['hs_cert_rqst_caus_cd'] : ''; // 인증요청사유코드 2byte (00:회원가입, 01:성인인증, 02:회원정보수정, 03:비밀번호찾기, 04:상품구매, 99:기타)
|
||||
|
||||
$resultCd = isset($_REQUEST['result_cd']) ? $_REQUEST['result_cd'] : ''; // 결과코드
|
||||
$resultMsg = isset($_REQUEST['result_msg']) ? $_REQUEST['result_msg'] : ''; // 결과메세지
|
||||
$certDtTm = isset($_REQUEST['cert_dt_tm']) ? $_REQUEST['cert_dt_tm'] : ''; // 인증일시
|
||||
|
||||
if($resultCd != 'B000') {
|
||||
alert_close('휴대폰 본인확인 중 오류가 발생했습니다. 오류코드 : '.$resultCd.'\\n\\n문의는 코리아크레딧뷰로 고객센터 02-708-1000 로 해주십시오.');
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 모듈 호출 ; 생년월일 본인 확인서비스 결과 데이터를 복호화한다.
|
||||
**************************************************************************/
|
||||
$encInfo = isset($_REQUEST['encInfo']) ? $_REQUEST['encInfo'] : '';
|
||||
if(preg_match('~[^0-9a-zA-Z+/=]~', $encInfo, $match)) {echo "입력 값 확인이 필요합니다"; exit;}
|
||||
|
||||
//KCB서버 공개키
|
||||
$WEBPUBKEY = isset($_REQUEST['WEBPUBKEY']) ? trim($_REQUEST['WEBPUBKEY']) : '';
|
||||
if(preg_match('~[^0-9a-zA-Z+/=]~', $WEBPUBKEY, $match)) {echo "입력 값 확인이 필요합니다"; exit;}
|
||||
|
||||
//KCB서버 서명값
|
||||
$WEBSIGNATURE = isset($_REQUEST['WEBSIGNATURE']) ? trim($_REQUEST['WEBSIGNATURE']) : '';
|
||||
if(preg_match('~[^0-9a-zA-Z+/=]~', $WEBSIGNATURE, $match)) {echo "입력 값 확인이 필요합니다"; exit;}
|
||||
|
||||
// ########################################################################
|
||||
// # 암호화키 파일 설정 (절대경로) - 파일은 주어진 파일명으로 자동 생성 됨
|
||||
// ########################################################################
|
||||
$keypath = G5_OKNAME_PATH.'/key/safecert_'.$idcfMbrComCd.'.key';
|
||||
|
||||
$cpubkey = $WEBPUBKEY; //server publickey
|
||||
$csig = $WEBSIGNATURE; //server signature
|
||||
|
||||
// ########################################################################
|
||||
// # 로그 경로 지정 및 권한 부여 (절대경로)
|
||||
// # 옵션값에 'L'을 추가하는 경우에만 로그가 생성됨.
|
||||
// ########################################################################
|
||||
$option = 'SU';
|
||||
|
||||
// 명령어
|
||||
$cmd = "$exe $keypath $idcfMbrComCd $endPointUrl $WEBPUBKEY $WEBSIGNATURE $encInfo $logPath $option";
|
||||
|
||||
// 실행
|
||||
exec($cmd, $out, $ret);
|
||||
|
||||
// 인증내역기록
|
||||
@insert_cert_history($member['mb_id'], 'kcb', 'hp');
|
||||
|
||||
if($ret == 0) {
|
||||
// 결과라인에서 값을 추출
|
||||
foreach($out as $a => $b) {
|
||||
if($a < 17) {
|
||||
$field[$a] = $b;
|
||||
}
|
||||
}
|
||||
$resultCd = $field[0];
|
||||
}
|
||||
else {
|
||||
if($ret <=200)
|
||||
$resultCd=sprintf("B%03d", $ret);
|
||||
else
|
||||
$resultCd=sprintf("S%03d", $ret);
|
||||
}
|
||||
|
||||
/*
|
||||
echo "처리결과코드 :$resultCd <br/>";
|
||||
echo "처리결과메시지 :$field[1] <br/>";
|
||||
echo "거래일련번호 :$field[2] <br/>";
|
||||
echo "인증일시 :$field[3] <br/>";
|
||||
echo "DI :$field[4] <br/>";
|
||||
echo "CI :$field[5] <br/>";
|
||||
echo "성명 :$field[7] <br/>";
|
||||
echo "생년월일 :$field[8] <br/>";
|
||||
echo "성별 :$field[9] <br/>";
|
||||
echo "내외국인구분 :$field[10] <br/>";
|
||||
echo "통신사코드 :$field[11] <br/>";
|
||||
echo "휴대폰번호 :$field[12] <br/>";
|
||||
echo "리턴메시지 :$field[16] <br/>";
|
||||
*/
|
||||
|
||||
// 인증결과처리
|
||||
$mb_name = $field[7];
|
||||
$req_num = $field[12];
|
||||
$mb_birth = $field[8];
|
||||
$mb_dupinfo = $field[4];
|
||||
$ci = $field[5];
|
||||
|
||||
$phone_no = hyphen_hp_number($req_num);
|
||||
$md5_ci = md5($ci.$ci);
|
||||
|
||||
$row = sql_fetch("select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$md5_ci}'"); // ci데이터로 찾음
|
||||
if (!$row['mb_id']) { // ci로 등록된 계정이 없다면
|
||||
$row = sql_fetch("select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$mb_dupinfo}'"); // di데이터로 찾음
|
||||
if(!$row['mb_id']) {
|
||||
alert_close("인증하신 정보로 가입된 회원정보가 없습니다.");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$g5['title'] = 'KCB 휴대폰 본인확인';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
?>
|
||||
<form name="mbFindForm" method="POST">
|
||||
<input type="hidden" name="mb_id" value="<?php echo $row["mb_id"]; ?>">
|
||||
</form>
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
|
||||
var $opener = window.opener;
|
||||
var is_mobile = false;
|
||||
$opener.name="parentPage";
|
||||
|
||||
if (typeof g5_is_mobile != "undefined" && g5_is_mobile ) {
|
||||
$opener = window.parent;
|
||||
is_mobile = true;
|
||||
} else {
|
||||
$opener = window.opener;
|
||||
}
|
||||
|
||||
document.mbFindForm.target = "parentPage";
|
||||
document.mbFindForm.action = "<?php echo G5_BBS_URL.'/password_reset.php'?>";
|
||||
document.mbFindForm.submit();
|
||||
|
||||
alert("본인인증이 완료되었습니다.");
|
||||
window.close();
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
129
plugin/okname/find_ipin2.php
Normal file
129
plugin/okname/find_ipin2.php
Normal file
@ -0,0 +1,129 @@
|
||||
<?php
|
||||
include_once('./_common.php');
|
||||
|
||||
$check_arrays = array('exe', 'keypath', 'memid', 'EndPointURL', 'cpubkey', 'csig', 'encdata', 'logpath', 'option');
|
||||
|
||||
foreach($check_arrays as $key){
|
||||
if( isset($_REQUEST[$key]) && $_REQUEST[$key] ){
|
||||
die('bad request');
|
||||
}
|
||||
|
||||
$$key = '';
|
||||
}
|
||||
|
||||
require('./ipin.config.php');
|
||||
|
||||
//아이핀팝업에서 조회한 PERSONALINFO이다.
|
||||
@$encPsnlInfo = isset($_REQUEST["encPsnlInfo"]) ? $_REQUEST["encPsnlInfo"] : '';
|
||||
if(preg_match('~[^0-9a-zA-Z+/=]~', $encPsnlInfo, $match)) {echo "입력 값 확인이 필요합니다"; exit;}
|
||||
|
||||
//KCB서버 공개키
|
||||
@$WEBPUBKEY = isset($_REQUEST["WEBPUBKEY"]) ? trim($_REQUEST["WEBPUBKEY"]) : '';
|
||||
if(preg_match('~[^0-9a-zA-Z+/=]~', $WEBPUBKEY, $match)) {echo "입력 값 확인이 필요합니다"; exit;}
|
||||
|
||||
//KCB서버 서명값
|
||||
@$WEBSIGNATURE = isset($_REQUEST["WEBSIGNATURE"]) ? trim($_REQUEST["WEBSIGNATURE"]) : '';
|
||||
if(preg_match('~[^0-9a-zA-Z+/=]~', $WEBSIGNATURE, $match)) {echo "입력 값 확인이 필요합니다"; exit;}
|
||||
|
||||
//아이핀 서버와 통신을 위한 키파일 생성
|
||||
// 파라미터 정의
|
||||
$cpubkey = $WEBPUBKEY; //server publickey
|
||||
$csig = $WEBSIGNATURE; //server signature
|
||||
$encdata = $encPsnlInfo; //PERSONALINFO
|
||||
$option = "SU";
|
||||
|
||||
// 명령어
|
||||
$cmd = "$exe $keypath $memid $EndPointURL $cpubkey $csig $encdata $logpath $option";
|
||||
|
||||
// 실행
|
||||
exec($cmd, $out, $ret);
|
||||
|
||||
// 인증내역기록
|
||||
@insert_cert_history($member['mb_id'], 'kcb', 'ipin');
|
||||
|
||||
if($ret != 0) {
|
||||
if($ret <=200)
|
||||
$resultCd=sprintf("B%03d", $ret);
|
||||
else
|
||||
$resultCd=sprintf("S%03d", $ret);
|
||||
|
||||
alert_close('아이핀 본인확인 중 오류가 발생했습니다. 오류코드 : '.$resultCd.'\\n\\n문의는 코리아크레딧뷰로 고객센터 02-708-1000 로 해주십시오.');
|
||||
}
|
||||
|
||||
// 결과라인에서 값을 추출
|
||||
foreach($out as $a => $b) {
|
||||
if($a < 13) {
|
||||
$field[$a] = $b;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
$field_name_IPIN_DEC = array(
|
||||
"dupInfo ", // 0
|
||||
"coinfo1 ", // 1
|
||||
"coinfo2 ", // 2
|
||||
"ciupdate ", // 3
|
||||
"virtualNo ", // 4
|
||||
"cpCode ", // 5
|
||||
"realName ", // 6
|
||||
"cpRequestNumber", // 7
|
||||
"age ", // 8
|
||||
"sex ", // 9
|
||||
"nationalInfo ", // 10
|
||||
"birthDate ", // 11
|
||||
"authInfo ", // 12
|
||||
);
|
||||
*/
|
||||
|
||||
$mb_name = $field[6];
|
||||
$req_num = $field[7];
|
||||
$mb_birth = $field[11];
|
||||
$mb_dupinfo = $field[0];
|
||||
if(!empty($field[1])) { // 아이핀은 리턴받는 ci 데이터가 두가지인걸로 보아 개인별로 받는 곳이 다를 수도 있을것 같아서 추가함 2021-09-13 hjkim7153
|
||||
$ci = $field[1];
|
||||
}else if(!empty($field[2])) {
|
||||
$ci = $field[2];
|
||||
}else{
|
||||
alert_close('아이핀 본인확인 중 오류가 발생했습니다. (ci 정보 없음) 오류코드 : '.$resultCd.'\\n\\n문의는 코리아크레딧뷰로 고객센터 02-708-1000 로 해주십시오.');
|
||||
}
|
||||
$md5_ci = md5($ci.$ci);
|
||||
|
||||
$row = sql_fetch("select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$md5_ci}'"); // ci데이터로 찾음
|
||||
if (!$row['mb_id']) { // ci로 등록된 계정이 없다면
|
||||
$row = sql_fetch("select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$mb_dupinfo}'"); // di데이터로 찾음
|
||||
if(!$row['mb_id']) {
|
||||
alert_close("인증하신 정보로 가입된 회원정보가 없습니다.");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
$g5['title'] = 'KCB 아이핀 본인확인';
|
||||
include_once(G5_PATH.'/head.sub.php');
|
||||
?>
|
||||
|
||||
<form name="mbFindForm" method="POST">
|
||||
<input type="hidden" name="mb_id" value="<?php echo $row["mb_id"]; ?>">
|
||||
</form>
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
|
||||
var $opener = window.opener;
|
||||
var is_mobile = false;
|
||||
$opener.name="parentPage";
|
||||
|
||||
if (typeof g5_is_mobile != "undefined" && g5_is_mobile ) {
|
||||
$opener = window.parent;
|
||||
is_mobile = true;
|
||||
} else {
|
||||
$opener = window.opener;
|
||||
}
|
||||
|
||||
document.mbFindForm.target = "parentPage";
|
||||
document.mbFindForm.action = "<?php echo G5_BBS_URL.'/password_reset.php'?>";
|
||||
document.mbFindForm.submit();
|
||||
|
||||
alert("본인인증이 완료되었습니다.");
|
||||
window.close();
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
include_once(G5_PATH.'/tail.sub.php');
|
||||
@ -80,4 +80,4 @@ if($config['cf_cert_use'] == 2) {
|
||||
// ########################################################################
|
||||
// # 리턴 URL 설정
|
||||
// ########################################################################
|
||||
$returnUrl = escapeshellarg(G5_OKNAME_URL.'/hpcert2.php'); // 본인인증 완료후 리턴될 URL (도메인 포함 full path);
|
||||
$returnUrl = escapeshellarg(G5_OKNAME_URL.$resultPage); // 본인인증 완료후 리턴될 URL (도메인 포함 full path);
|
||||
@ -14,6 +14,14 @@ foreach($check_arrays as $key){
|
||||
// 금일 인증시도 회수 체크
|
||||
certify_count_check($member['mb_id'], 'hp');
|
||||
|
||||
switch($_GET['pageType']){
|
||||
case "register":
|
||||
$resultPage = "/hpcert2.php";
|
||||
break;
|
||||
case "find":
|
||||
$resultPage = "/find_hpcert2.php";
|
||||
break;
|
||||
}
|
||||
// KISA 취약점 내용(KVE-2018-0291) hpcert1.php의 $cmd 함수에 대한 인자 값은 hpcert_config.php 파일에서 설정되나, 이를 다른 페이지에서 포함한 뒤 호출할 시 임의 값 설정 가능
|
||||
// 이에 include_once 를 require 로 수정함
|
||||
require('./hpcert.config.php');
|
||||
|
||||
@ -108,7 +108,9 @@ echo "리턴메시지 :$field[16] <br/>";
|
||||
$mb_name = $field[7];
|
||||
$req_num = $field[12];
|
||||
$mb_birth = $field[8];
|
||||
$mb_dupinfo = $field[4];
|
||||
$di = $field[4];
|
||||
$ci = $field[5];
|
||||
$mb_dupinfo = md5($ci.$ci); // 통합인증 추가 후 ci로 변경
|
||||
$phone_no = hyphen_hp_number($req_num);
|
||||
|
||||
// 중복정보 체크
|
||||
|
||||
@ -36,7 +36,7 @@ if($config['cf_cert_use'] == 2) {
|
||||
}
|
||||
|
||||
$idpCode = 'V';
|
||||
$returnUrl = G5_OKNAME_URL.'/ipin2.php'; // 아이핀 인증을 마치고 돌아올 페이지 주소
|
||||
$returnUrl = G5_OKNAME_URL.$resultPage; // 아이핀 인증을 마치고 돌아올 페이지 주소
|
||||
$keypath = G5_OKNAME_PATH.'/key/okname.key'; // 키파일이 생성될 위치. 웹서버에 해당파일을 생성할 권한 필요.
|
||||
$memid = $cpCode; // 회원사코드
|
||||
$reserved1 = '0'; //reserved1
|
||||
|
||||
@ -14,6 +14,14 @@ foreach($check_arrays as $key){
|
||||
// 금일 인증시도 회수 체크
|
||||
certify_count_check($member['mb_id'], 'ipin');
|
||||
|
||||
switch($_GET['pageType']){
|
||||
case "register":
|
||||
$resultPage = "/ipin2.php";
|
||||
break;
|
||||
case "find":
|
||||
$resultPage = "/find_ipin2.php";
|
||||
break;
|
||||
}
|
||||
// KISA 취약점 내용(KVE-2018-0291) hpcert1.php의 $cmd 함수에 대한 인자 값은 hpcert_config.php 파일에서 설정되나, 이를 다른 페이지에서 포함한 뒤 호출할 시 임의 값 설정 가능
|
||||
// 이에 include_once 를 require 로 수정함
|
||||
require('./ipin.config.php');
|
||||
|
||||
@ -78,7 +78,15 @@ $field_name_IPIN_DEC = array(
|
||||
$mb_name = $field[6];
|
||||
$req_num = $field[7];
|
||||
$mb_birth = $field[11];
|
||||
$mb_dupinfo = $field[0];
|
||||
$di = $field[0];
|
||||
if(!empty($field[1])) { // 아이핀은 리턴받는 ci 데이터가 두가지인걸로 보아 개인별로 받는 곳이 다를 수도 있을것 같아서 추가함 2021-09-13 hjkim7153
|
||||
$ci = $field[1];
|
||||
}else if(!empty($field[2])) {
|
||||
$ci = $field[2];
|
||||
}else{
|
||||
alert_close('아이핀 본인확인 중 오류가 발생했습니다. (ci 정보 없음) 오류코드 : '.$resultCd.'\\n\\n문의는 코리아크레딧뷰로 고객센터 02-708-1000 로 해주십시오.');
|
||||
}
|
||||
$mb_dupinfo = md5($ci.$ci); // 통합인증 추가 후 ci로 변경
|
||||
|
||||
// 중복정보 체크
|
||||
$sql = " select mb_id from {$g5['member_table']} where mb_id <> '{$member['mb_id']}' and mb_dupinfo = '{$mb_dupinfo}' ";
|
||||
|
||||
Reference in New Issue
Block a user