본문으로 건너뛰기

로그인·카카오싱크 보안 강화.

PHP 8 · GODO26
변경 파일 수: 15개
변경 파일 목록
총 15개
변경 파일 코드
추가삭제
Component/Member/Member.php+1-1
변경 전Member.php
{
$data['PAGE_URL'] = Request::getDomainUrl() . Request::getRequestUri();
$data['POST'] = Request::post()->toArray();
unset($data['POST']['loginPwd']);
$data['GET'] = Request::get()->toArray();
$data['USER_AGENT'] = Request::getUserAgent();
$data['SESSION'] = \Session::get('member');
 
변경 후Member.php
{
$data['PAGE_URL'] = Request::getDomainUrl() . Request::getRequestUri();
$data['POST'] = Request::post()->toArray();
unset($data['POST']['loginPwd'], $data['POST']['secretKey']);
$data['GET'] = Request::get()->toArray();
$data['USER_AGENT'] = Request::getUserAgent();
$data['SESSION'] = \Session::get('member');
 
Component/Member/Util/MemberUtil.php+14-2
변경 전MemberUtil.php
* @param string $encryptedString 암호화된 로그인 정보
* @param string $key 암호화 키
*
* @return String
* @throws Exception
*/
public function jsDecrypt($encryptedString, $key= self::SECRET_KEY)
{
$json = json_decode(base64_decode($encryptedString), true);
 
 
 
 
 
 
 
 
 
 
 
 
 
try {
$salt = hex2bin($json["salt"]);
$iv = hex2bin($json["iv"]);
}
 
$cipherText = base64_decode($json['ciphertext']);
$iterations = (int)abs($json['iterations']);
if ($iterations <= 0) {
$iterations = 999;
}
 
변경 후MemberUtil.php
* @param string $encryptedString 암호화된 로그인 정보
* @param string $key 암호화 키
*
* @return string|null
* @throws Exception
*/
public function jsDecrypt($encryptedString, $key= self::SECRET_KEY)
{
$json = json_decode(base64_decode($encryptedString), true);
 
// 평문 전송 전환기: 암호문 구조가 아닌 입력은 복호화 불가로 간주 (Warning 방지)
if (!is_array($json) || !isset($json['salt'], $json['iv'], $json['ciphertext'])) {
return null;
}
 
// hex2bin() E_WARNING 방지: salt·iv 가 짝수 길이 16진수 문자열이 아니면 복호화 불가로 간주
foreach (['salt', 'iv'] as $hexKey) {
if (!is_string($json[$hexKey]) || !ctype_xdigit($json[$hexKey]) || strlen($json[$hexKey]) % 2 !== 0) {
return null;
}
}
 
try {
$salt = hex2bin($json["salt"]);
$iv = hex2bin($json["iv"]);
}
 
$cipherText = base64_decode($json['ciphertext']);
$iterations = (int)abs($json['iterations'] ?? 0);
if ($iterations <= 0) {
$iterations = 999;
}
 
Controller/Front/Member/LoginPsController.php+6
변경 전LoginPsController.php
$decryptLoginPwd = $memberUtil->jsDecrypt($request->post()->get('loginPwd'), self::SECRET_KEY);
 
if (empty($decryptLoginPwd) === false) {
 
 
$request->post()->set('loginId', trim($decryptLoginId));
$request->post()->set('loginPwd', trim($decryptLoginPwd));
 
 
 
 
}
 
//카카오 계정탈퇴 혹은 연결해제시 카카오에서 연결끊기 콜백 url 받아 카카오 연결 정보 삭제
 
변경 후LoginPsController.php
$decryptLoginPwd = $memberUtil->jsDecrypt($request->post()->get('loginPwd'), self::SECRET_KEY);
 
if (empty($decryptLoginPwd) === false) {
// 클라이언트 암호화 제거 전환기: 암호문을 보내는 구스킨 잔존 상점 실측용
$logger->channel('userLogin')->info('로그인 암호문 수신', ['referer' => $request->getReferer()]);
$request->post()->set('loginId', trim($decryptLoginId));
$request->post()->set('loginPwd', trim($decryptLoginPwd));
} else {
// 평문 전송 스킨: 암호문 경로와 동일하게 loginId/loginPwd trim 정합
$request->post()->set('loginId', trim($request->post()->get('loginId') ?? ''));
$request->post()->set('loginPwd', trim($request->post()->get('loginPwd') ?? ''));
}
 
//카카오 계정탈퇴 혹은 연결해제시 카카오에서 연결끊기 콜백 url 받아 카카오 연결 정보 삭제
 
data/skin/front/moment/member/kakao_connect.html+2-40
변경 전kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}" />
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
/**
* 로그인 정보 암호화 처리
*/
let Encryption = {
get encryptMethod() {
return "AES-256-CBC";
},
get encryptMethodLength() {
let encryptMethod = this.encryptMethod;
let aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt: function (string, key) {
let iv = CryptoJS.lib.WordArray.random(16);
let salt = CryptoJS.lib.WordArray.random(256);
let iterations = 999;
let encryptMethodLength = this.encryptMethodLength / 4;
let hashKey = CryptoJS.PBKDF2(key, salt, { hasher: CryptoJS.algo.SHA512, keySize: encryptMethodLength / 8, iterations: iterations });
let encrypted = CryptoJS.AES.encrypt(string, hashKey, { mode: CryptoJS.mode.CBC, iv: iv });
let encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
let output = {
ciphertext: encryptedString,
iv: CryptoJS.enc.Hex.stringify(iv),
salt: CryptoJS.enc.Hex.stringify(salt),
iterations: iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
};
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
let secretKey = $("#secretKey").val();
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
let encryptLoginId = Encryption.encrypt(loginId, secretKey);
let encryptLoginPwd = Encryption.encrypt(loginPwd, secretKey);
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: encryptLoginId,
loginPwd: encryptLoginPwd,
token: token
},
success: function (data) {
 
변경 후kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
 
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
 
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
 
 
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: loginId,
loginPwd: loginPwd,
token: token
},
success: function (data) {
 
data/skin/front/moment/member/login.html-62
변경 전login.html
<form id="formLogin" method="post" action="{loginActionUrl}">
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="returnUrl" name="returnUrl" value="{returnUrl}"/>
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}"/>
<input type="hidden" id="encryptFl" name="encryptFl" value="Y"/>
<div class="member_login_box">
<h3>{=__('회원 로그인')}</h3>
<div class="login_input_sec">
<script type="text/javascript">
var $formLogin;
 
/**
* 로그인 정보 암호화 처리
*/
var Encryption = {
get encryptMethod() {
return 'AES-256-CBC';
},
get encryptMethodLength() {
var encryptMethod = this.encryptMethod;
var aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt : function (string, key) {
var iv = CryptoJS.lib.WordArray.random(16);
var salt = CryptoJS.lib.WordArray.random(256);
var iterations = 999;
var encryptMethodLength = (this.encryptMethodLength/4);
var hashKey = CryptoJS.PBKDF2(key, salt, {'hasher': CryptoJS.algo.SHA512, 'keySize': (encryptMethodLength/8), 'iterations': iterations});
var encrypted = CryptoJS.AES.encrypt(string, hashKey, {'mode': CryptoJS.mode.CBC, 'iv': iv});
var encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
var output = {
'ciphertext': encryptedString,
'iv': CryptoJS.enc.Hex.stringify(iv),
'salt': CryptoJS.enc.Hex.stringify(salt),
'iterations': iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
}
 
/**
* form serialize 값 변경
*
* @param values 폼명
* @param k 변경할 inputName
* @param v 변경할 inputValue
*/
function changeSerialize(values, k, v) {
var found = false;
for (i = 0; i < values.length && !found; i++) {
if (values[i].name == k) {
values[i].value = v;
found = true;
}
}
 
if (!found) {
values.push({name: k,value: v});
}
return values;
}
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$('#btnJoinMember').click(function (e) {
}
}
 
// 로그인 정보 암호화 처리 (보안이슈)
var encryptLoginId = Encryption.encrypt($('#loginId').val(),$('#secretKey').val());
var encryptLoginPwd = Encryption.encrypt($('#loginPwd').val(),$('#secretKey').val());
 
var params = $(form).serializeArray();
params = changeSerialize(params, 'loginId', encryptLoginId); // 암호화 된 아이디로 변경
params = changeSerialize(params, 'loginPwd', encryptLoginPwd); // 암호화 된 패스워드로 변경
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
변경 후login.html
<form id="formLogin" method="post" action="{loginActionUrl}">
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="returnUrl" name="returnUrl" value="{returnUrl}"/>
 
 
<div class="member_login_box">
<h3>{=__('회원 로그인')}</h3>
<div class="login_input_sec">
<script type="text/javascript">
var $formLogin;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$('#btnJoinMember').click(function (e) {
}
}
 
 
 
 
 
var params = $(form).serializeArray();
 
 
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
data/skin/front/mygreek/member/kakao_connect.html+2-40
변경 전kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}" />
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
/**
* 로그인 정보 암호화 처리
*/
let Encryption = {
get encryptMethod() {
return "AES-256-CBC";
},
get encryptMethodLength() {
let encryptMethod = this.encryptMethod;
let aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt: function (string, key) {
let iv = CryptoJS.lib.WordArray.random(16);
let salt = CryptoJS.lib.WordArray.random(256);
let iterations = 999;
let encryptMethodLength = this.encryptMethodLength / 4;
let hashKey = CryptoJS.PBKDF2(key, salt, { hasher: CryptoJS.algo.SHA512, keySize: encryptMethodLength / 8, iterations: iterations });
let encrypted = CryptoJS.AES.encrypt(string, hashKey, { mode: CryptoJS.mode.CBC, iv: iv });
let encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
let output = {
ciphertext: encryptedString,
iv: CryptoJS.enc.Hex.stringify(iv),
salt: CryptoJS.enc.Hex.stringify(salt),
iterations: iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
};
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
let secretKey = $("#secretKey").val();
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
let encryptLoginId = Encryption.encrypt(loginId, secretKey);
let encryptLoginPwd = Encryption.encrypt(loginPwd, secretKey);
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: encryptLoginId,
loginPwd: encryptLoginPwd,
token: token
},
success: function (data) {
 
변경 후kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
 
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
 
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
 
 
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: loginId,
loginPwd: loginPwd,
token: token
},
success: function (data) {
 
data/skin/front/mygreek/member/login.html-62
변경 전login.html
<form id="formLogin" method="post" action="{loginActionUrl}">
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="returnUrl" name="returnUrl" value="{returnUrl}"/>
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}"/>
<input type="hidden" id="encryptFl" name="encryptFl" value="Y"/>
<div class="member_login_box">
<h3>{=__('회원 로그인')}</h3>
<div class="login_input_sec">
<script type="text/javascript">
var $formLogin;
 
/**
* 로그인 정보 암호화 처리
*/
var Encryption = {
get encryptMethod() {
return 'AES-256-CBC';
},
get encryptMethodLength() {
var encryptMethod = this.encryptMethod;
var aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt : function (string, key) {
var iv = CryptoJS.lib.WordArray.random(16);
var salt = CryptoJS.lib.WordArray.random(256);
var iterations = 999;
var encryptMethodLength = (this.encryptMethodLength/4);
var hashKey = CryptoJS.PBKDF2(key, salt, {'hasher': CryptoJS.algo.SHA512, 'keySize': (encryptMethodLength/8), 'iterations': iterations});
var encrypted = CryptoJS.AES.encrypt(string, hashKey, {'mode': CryptoJS.mode.CBC, 'iv': iv});
var encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
var output = {
'ciphertext': encryptedString,
'iv': CryptoJS.enc.Hex.stringify(iv),
'salt': CryptoJS.enc.Hex.stringify(salt),
'iterations': iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
}
 
/**
* form serialize 값 변경
*
* @param values 폼명
* @param k 변경할 inputName
* @param v 변경할 inputValue
*/
function changeSerialize(values, k, v) {
var found = false;
for (i = 0; i < values.length && !found; i++) {
if (values[i].name == k) {
values[i].value = v;
found = true;
}
}
 
if (!found) {
values.push({name: k,value: v});
}
return values;
}
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$('#btnJoinMember').click(function (e) {
}
}
 
// 로그인 정보 암호화 처리 (보안이슈)
var encryptLoginId = Encryption.encrypt($('#loginId').val(),$('#secretKey').val());
var encryptLoginPwd = Encryption.encrypt($('#loginPwd').val(),$('#secretKey').val());
 
var params = $(form).serializeArray();
params = changeSerialize(params, 'loginId', encryptLoginId); // 암호화 된 아이디로 변경
params = changeSerialize(params, 'loginPwd', encryptLoginPwd); // 암호화 된 패스워드로 변경
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
변경 후login.html
<form id="formLogin" method="post" action="{loginActionUrl}">
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="returnUrl" name="returnUrl" value="{returnUrl}"/>
 
 
<div class="member_login_box">
<h3>{=__('회원 로그인')}</h3>
<div class="login_input_sec">
<script type="text/javascript">
var $formLogin;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$('#btnJoinMember').click(function (e) {
}
}
 
 
 
 
 
var params = $(form).serializeArray();
 
 
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
data/skin/front/story_g/member/kakao_connect.html+2-40
변경 전kakao_connect.html
<h2>{=__('회원 정보 확인')}</h2>
<div class="box kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}" />
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
/**
* 로그인 정보 암호화 처리
*/
let Encryption = {
get encryptMethod() {
return "AES-256-CBC";
},
get encryptMethodLength() {
let encryptMethod = this.encryptMethod;
let aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt: function (string, key) {
let iv = CryptoJS.lib.WordArray.random(16);
let salt = CryptoJS.lib.WordArray.random(256);
let iterations = 999;
let encryptMethodLength = this.encryptMethodLength / 4;
let hashKey = CryptoJS.PBKDF2(key, salt, { hasher: CryptoJS.algo.SHA512, keySize: encryptMethodLength / 8, iterations: iterations });
let encrypted = CryptoJS.AES.encrypt(string, hashKey, { mode: CryptoJS.mode.CBC, iv: iv });
let encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
let output = {
ciphertext: encryptedString,
iv: CryptoJS.enc.Hex.stringify(iv),
salt: CryptoJS.enc.Hex.stringify(salt),
iterations: iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
};
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
let secretKey = $("#secretKey").val();
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
let encryptLoginId = Encryption.encrypt(loginId, secretKey);
let encryptLoginPwd = Encryption.encrypt(loginPwd, secretKey);
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: encryptLoginId,
loginPwd: encryptLoginPwd,
token: token
},
success: function (data) {
 
변경 후kakao_connect.html
<h2>{=__('회원 정보 확인')}</h2>
<div class="box kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
 
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
 
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
 
 
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: loginId,
loginPwd: loginPwd,
token: token
},
success: function (data) {
 
data/skin/front/story_g/member/login.html-62
변경 전login.html
<form id="formLogin" method="post" action="{loginActionUrl}">
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="returnUrl" name="returnUrl" value="{returnUrl}"/>
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}"/>
<input type="hidden" id="encryptFl" name="encryptFl" value="Y"/>
<div class="login">
<div class="input-info">
<div>
<script type="text/javascript">
var $formLogin;
 
/**
* 로그인 정보 암호화 처리
*/
var Encryption = {
get encryptMethod() {
return 'AES-256-CBC';
},
get encryptMethodLength() {
var encryptMethod = this.encryptMethod;
var aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt : function (string, key) {
var iv = CryptoJS.lib.WordArray.random(16);
var salt = CryptoJS.lib.WordArray.random(256);
var iterations = 999;
var encryptMethodLength = (this.encryptMethodLength/4);
var hashKey = CryptoJS.PBKDF2(key, salt, {'hasher': CryptoJS.algo.SHA512, 'keySize': (encryptMethodLength/8), 'iterations': iterations});
var encrypted = CryptoJS.AES.encrypt(string, hashKey, {'mode': CryptoJS.mode.CBC, 'iv': iv});
var encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
var output = {
'ciphertext': encryptedString,
'iv': CryptoJS.enc.Hex.stringify(iv),
'salt': CryptoJS.enc.Hex.stringify(salt),
'iterations': iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
}
 
/**
* form serialize 값 변경
*
* @param values 폼명
* @param k 변경할 inputName
* @param v 변경할 inputValue
*/
function changeSerialize(values, k, v) {
var found = false;
for (i = 0; i < values.length && !found; i++) {
if (values[i].name == k) {
values[i].value = v;
found = true;
}
}
 
if (!found) {
values.push({name: k,value: v});
}
return values;
}
 
function login_fail(url, message) {
$formLogin.find('.caution-msg1').removeClass('dn').text(message);
setTimeout(function () {
}
}
 
// 로그인 정보 암호화 처리 (보안이슈)
var encryptLoginId = Encryption.encrypt($('#loginId').val(),$('#secretKey').val());
var encryptLoginPwd = Encryption.encrypt($('#loginPwd').val(),$('#secretKey').val());
 
var params = $(form).serializeArray();
params = changeSerialize(params, 'loginId', encryptLoginId); // 암호화 된 아이디로 변경
params = changeSerialize(params, 'loginPwd', encryptLoginPwd); // 암호화 된 패스워드로 변경
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
변경 후login.html
<form id="formLogin" method="post" action="{loginActionUrl}">
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="returnUrl" name="returnUrl" value="{returnUrl}"/>
 
 
<div class="login">
<div class="input-info">
<div>
<script type="text/javascript">
var $formLogin;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function login_fail(url, message) {
$formLogin.find('.caution-msg1').removeClass('dn').text(message);
setTimeout(function () {
}
}
 
 
 
 
 
var params = $(form).serializeArray();
 
 
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
data/skin/mobile/moment/member/kakao_connect.html+2-40
변경 전kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}" />
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
/**
* 로그인 정보 암호화 처리
*/
let Encryption = {
get encryptMethod() {
return "AES-256-CBC";
},
get encryptMethodLength() {
let encryptMethod = this.encryptMethod;
let aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt: function (string, key) {
let iv = CryptoJS.lib.WordArray.random(16);
let salt = CryptoJS.lib.WordArray.random(256);
let iterations = 999;
let encryptMethodLength = this.encryptMethodLength / 4;
let hashKey = CryptoJS.PBKDF2(key, salt, { hasher: CryptoJS.algo.SHA512, keySize: encryptMethodLength / 8, iterations: iterations });
let encrypted = CryptoJS.AES.encrypt(string, hashKey, { mode: CryptoJS.mode.CBC, iv: iv });
let encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
let output = {
ciphertext: encryptedString,
iv: CryptoJS.enc.Hex.stringify(iv),
salt: CryptoJS.enc.Hex.stringify(salt),
iterations: iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
};
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
let secretKey = $("#secretKey").val();
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
let encryptLoginId = Encryption.encrypt(loginId, secretKey);
let encryptLoginPwd = Encryption.encrypt(loginPwd, secretKey);
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: encryptLoginId,
loginPwd: encryptLoginPwd,
token: token
},
success: function (data) {
 
변경 후kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
 
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
 
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
 
 
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: loginId,
loginPwd: loginPwd,
token: token
},
success: function (data) {
 
data/skin/mobile/moment/member/login.html-66
변경 전login.html
<input type="hidden" name="saveFlag" value="{data.saveFlag}"/>
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="isMyapp" name="isMyapp" value="{isMyapp}"/>
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}"/>
<input type="hidden" id="encryptFl" name="encryptFl" value="Y"/>
<input type="hidden" id="encryptLoginId" name="encryptLoginId"/>
<input type="hidden" id="encryptLoginPwd" name="encryptLoginPwd"/>
<dl>
<dt><label for="loginId">{=__('아이디')}</label></dt>
<dd><input type="text" id="loginId" name="loginId" value="{data.loginId}" placeholder="{=__('아이디')}"/></dd>
var $formLogin;
var isMyapp = $('#isMyapp').val();
 
/**
* 로그인 정보 암호화 처리
*/
var Encryption = {
get encryptMethod() {
return 'AES-256-CBC';
},
get encryptMethodLength() {
var encryptMethod = this.encryptMethod;
var aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt : function (string, key) {
var iv = CryptoJS.lib.WordArray.random(16);
var salt = CryptoJS.lib.WordArray.random(256);
var iterations = 999;
var encryptMethodLength = (this.encryptMethodLength/4);
var hashKey = CryptoJS.PBKDF2(key, salt, {'hasher': CryptoJS.algo.SHA512, 'keySize': (encryptMethodLength/8), 'iterations': iterations});
var encrypted = CryptoJS.AES.encrypt(string, hashKey, {'mode': CryptoJS.mode.CBC, 'iv': iv});
var encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
var output = {
'ciphertext': encryptedString,
'iv': CryptoJS.enc.Hex.stringify(iv),
'salt': CryptoJS.enc.Hex.stringify(salt),
'iterations': iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
}
 
/**
* form serialize 값 변경
*
* @param values 폼명
* @param k 변경할 inputName
* @param v 변경할 inputValue
*/
function changeSerialize(values, k, v) {
var found = false;
for (i = 0; i < values.length && !found; i++) {
if (values[i].name == k) {
values[i].value = v;
found = true;
}
}
 
if (!found) {
values.push({name: k,value: v});
}
return values;
}
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$formLogin = $('#formLogin');
required: "{=__('패스워드를 입력해주세요')}"
}
}, submitHandler: function (form) {
// 로그인 정보 암호화 처리 (보안이슈)
var encryptLoginId = Encryption.encrypt($('#loginId').val(),$('#secretKey').val());
var encryptLoginPwd = Encryption.encrypt($('#loginPwd').val(),$('#secretKey').val());
 
if (isMyapp) {
form.encryptLoginId.value = encryptLoginId;
form.encryptLoginPwd.value = encryptLoginPwd;
form.target = 'ifrmProcess';
form.submit();
} else {
}
 
var params = $(form).serializeArray();
params = changeSerialize(params, 'loginId', encryptLoginId); // 암호화 된 아이디로 변경
params = changeSerialize(params, 'loginPwd', encryptLoginPwd); // 암호화 된 패스워드로 변경
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
변경 후login.html
<input type="hidden" name="saveFlag" value="{data.saveFlag}"/>
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="isMyapp" name="isMyapp" value="{isMyapp}"/>
 
 
 
 
<dl>
<dt><label for="loginId">{=__('아이디')}</label></dt>
<dd><input type="text" id="loginId" name="loginId" value="{data.loginId}" placeholder="{=__('아이디')}"/></dd>
var $formLogin;
var isMyapp = $('#isMyapp').val();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$formLogin = $('#formLogin');
required: "{=__('패스워드를 입력해주세요')}"
}
}, submitHandler: function (form) {
 
 
 
 
if (isMyapp) {
 
 
form.target = 'ifrmProcess';
form.submit();
} else {
}
 
var params = $(form).serializeArray();
 
 
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
data/skin/mobile/mygreek/member/kakao_connect.html+2-39
변경 전kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}" />
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
/**
* 로그인 정보 암호화 처리
*/
let Encryption = {
get encryptMethod() {
return "AES-256-CBC";
},
get encryptMethodLength() {
let encryptMethod = this.encryptMethod;
let aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt: function (string, key) {
let iv = CryptoJS.lib.WordArray.random(16);
let salt = CryptoJS.lib.WordArray.random(256);
let iterations = 999;
let encryptMethodLength = this.encryptMethodLength / 4;
let hashKey = CryptoJS.PBKDF2(key, salt, { hasher: CryptoJS.algo.SHA512, keySize: encryptMethodLength / 8, iterations: iterations });
let encrypted = CryptoJS.AES.encrypt(string, hashKey, { mode: CryptoJS.mode.CBC, iv: iv });
let encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
let output = {
ciphertext: encryptedString,
iv: CryptoJS.enc.Hex.stringify(iv),
salt: CryptoJS.enc.Hex.stringify(salt),
iterations: iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
};
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
let secretKey = $("#secretKey").val();
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
let encryptLoginId = Encryption.encrypt(loginId, secretKey);
let encryptLoginPwd = Encryption.encrypt(loginPwd, secretKey);
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: encryptLoginId,
loginPwd: encryptLoginPwd,
token: token
},
success: function (data) {
 
변경 후kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
 
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
 
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
 
 
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: loginId,
loginPwd: loginPwd,
token: token
},
success: function (data) {
 
data/skin/mobile/mygreek/member/login.html-66
변경 전login.html
<input type="hidden" name="saveFlag" value="{data.saveFlag}"/>
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="isMyapp" name="isMyapp" value="{isMyapp}"/>
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}"/>
<input type="hidden" id="encryptFl" name="encryptFl" value="Y"/>
<input type="hidden" id="encryptLoginId" name="encryptLoginId"/>
<input type="hidden" id="encryptLoginPwd" name="encryptLoginPwd"/>
<dl>
<dt><label for="loginId">{=__('아이디')}</label></dt>
<dd><input type="text" id="loginId" name="loginId" value="{data.loginId}" placeholder="{=__('아이디')}"/></dd>
var $formLogin;
var isMyapp = $('#isMyapp').val();
 
/**
* 로그인 정보 암호화 처리
*/
var Encryption = {
get encryptMethod() {
return 'AES-256-CBC';
},
get encryptMethodLength() {
var encryptMethod = this.encryptMethod;
var aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt : function (string, key) {
var iv = CryptoJS.lib.WordArray.random(16);
var salt = CryptoJS.lib.WordArray.random(256);
var iterations = 999;
var encryptMethodLength = (this.encryptMethodLength/4);
var hashKey = CryptoJS.PBKDF2(key, salt, {'hasher': CryptoJS.algo.SHA512, 'keySize': (encryptMethodLength/8), 'iterations': iterations});
var encrypted = CryptoJS.AES.encrypt(string, hashKey, {'mode': CryptoJS.mode.CBC, 'iv': iv});
var encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
var output = {
'ciphertext': encryptedString,
'iv': CryptoJS.enc.Hex.stringify(iv),
'salt': CryptoJS.enc.Hex.stringify(salt),
'iterations': iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
}
 
/**
* form serialize 값 변경
*
* @param values 폼명
* @param k 변경할 inputName
* @param v 변경할 inputValue
*/
function changeSerialize(values, k, v) {
var found = false;
for (i = 0; i < values.length && !found; i++) {
if (values[i].name == k) {
values[i].value = v;
found = true;
}
}
 
if (!found) {
values.push({name: k,value: v});
}
return values;
}
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$formLogin = $('#formLogin');
required: "{=__('패스워드를 입력해주세요')}"
}
}, submitHandler: function (form) {
// 로그인 정보 암호화 처리 (보안이슈)
var encryptLoginId = Encryption.encrypt($('#loginId').val(),$('#secretKey').val());
var encryptLoginPwd = Encryption.encrypt($('#loginPwd').val(),$('#secretKey').val());
 
if (isMyapp) {
form.encryptLoginId.value = encryptLoginId;
form.encryptLoginPwd.value = encryptLoginPwd;
form.target = 'ifrmProcess';
form.submit();
} else {
}
 
var params = $(form).serializeArray();
params = changeSerialize(params, 'loginId', encryptLoginId); // 암호화 된 아이디로 변경
params = changeSerialize(params, 'loginPwd', encryptLoginPwd); // 암호화 된 패스워드로 변경
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
변경 후login.html
<input type="hidden" name="saveFlag" value="{data.saveFlag}"/>
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="isMyapp" name="isMyapp" value="{isMyapp}"/>
 
 
 
 
<dl>
<dt><label for="loginId">{=__('아이디')}</label></dt>
<dd><input type="text" id="loginId" name="loginId" value="{data.loginId}" placeholder="{=__('아이디')}"/></dd>
var $formLogin;
var isMyapp = $('#isMyapp').val();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$(document).ready(function () {
var order_no_max_length = $('input[name=orderNo]').data('max-length');
$formLogin = $('#formLogin');
required: "{=__('패스워드를 입력해주세요')}"
}
}, submitHandler: function (form) {
 
 
 
 
if (isMyapp) {
 
 
form.target = 'ifrmProcess';
form.submit();
} else {
}
 
var params = $(form).serializeArray();
 
 
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
data/skin/mobile/story_g/member/kakao_connect.html+2-39
변경 전kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}" />
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
/**
* 로그인 정보 암호화 처리
*/
let Encryption = {
get encryptMethod() {
return "AES-256-CBC";
},
get encryptMethodLength() {
let encryptMethod = this.encryptMethod;
let aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt: function (string, key) {
let iv = CryptoJS.lib.WordArray.random(16);
let salt = CryptoJS.lib.WordArray.random(256);
let iterations = 999;
let encryptMethodLength = this.encryptMethodLength / 4;
let hashKey = CryptoJS.PBKDF2(key, salt, { hasher: CryptoJS.algo.SHA512, keySize: encryptMethodLength / 8, iterations: iterations });
let encrypted = CryptoJS.AES.encrypt(string, hashKey, { mode: CryptoJS.mode.CBC, iv: iv });
let encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
let output = {
ciphertext: encryptedString,
iv: CryptoJS.enc.Hex.stringify(iv),
salt: CryptoJS.enc.Hex.stringify(salt),
iterations: iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
};
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
let secretKey = $("#secretKey").val();
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
let encryptLoginId = Encryption.encrypt(loginId, secretKey);
let encryptLoginPwd = Encryption.encrypt(loginPwd, secretKey);
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: encryptLoginId,
loginPwd: encryptLoginPwd,
token: token
},
success: function (data) {
 
변경 후kakao_connect.html
<!-- //member_tit -->
<div class="member_cont kakao_connect">
<input type="hidden" id="token" name="token" value="{token}" />
 
<div class="kakao_connect_header">
<h3><b>{kakaoEmail}</b>{=__('으로 가입된 회원정보가 있습니다.')}</h3>
</div>
location.href = "../member/login.php";
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
function connectToKakao() {
let memNo = $("input[name='memNo']:checked").val();
if (!memNo) {
let loginId = $("#loginId").val();
let loginPwd = $("#loginPwd").val();
let token = $("#token").val();
 
 
if (!loginId) {
alert('{=__("아이디를 입력해주세요.")}');
return;
}
 
 
 
 
$("#connectToKakaoBtn").prop("disabled", true);
 
$.ajax({
url: "../member/kakao_connect_ps.php",
data: {
memNo: memNo,
loginId: loginId,
loginPwd: loginPwd,
token: token
},
success: function (data) {
 
data/skin/mobile/story_g/member/login.html-66
변경 전login.html
<input type="hidden" name="saveFlag" value="{data.saveFlag}"/>
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="isMyapp" name="isMyapp" value="{isMyapp}"/>
<input type="hidden" id="secretKey" name="secretKey" value="{secretKey}"/>
<input type="hidden" id="encryptFl" name="encryptFl" value="Y"/>
<input type="hidden" id="encryptLoginId" name="encryptLoginId"/>
<input type="hidden" id="encryptLoginPwd" name="encryptLoginPwd"/>
<div class="inp_tx">
<label for="loginId" class="blind">{=__('아이디')}</label>
<input type="text" id="loginId" name="loginId" value="{data.loginId}" placeholder="{=__('아이디')}">
var $formLogin;
var isMyapp = $('#isMyapp').val();
 
/**
* 로그인 정보 암호화 처리
*/
var Encryption = {
get encryptMethod() {
return 'AES-256-CBC';
},
get encryptMethodLength() {
var encryptMethod = this.encryptMethod;
var aesNumber = encryptMethod.match(/\d+/)[0];
return parseInt(aesNumber);
},
encrypt : function (string, key) {
var iv = CryptoJS.lib.WordArray.random(16);
var salt = CryptoJS.lib.WordArray.random(256);
var iterations = 999;
var encryptMethodLength = (this.encryptMethodLength/4);
var hashKey = CryptoJS.PBKDF2(key, salt, {'hasher': CryptoJS.algo.SHA512, 'keySize': (encryptMethodLength/8), 'iterations': iterations});
var encrypted = CryptoJS.AES.encrypt(string, hashKey, {'mode': CryptoJS.mode.CBC, 'iv': iv});
var encryptedString = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
 
var output = {
'ciphertext': encryptedString,
'iv': CryptoJS.enc.Hex.stringify(iv),
'salt': CryptoJS.enc.Hex.stringify(salt),
'iterations': iterations
};
 
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(output)));
}
}
 
/**
* form serialize 값 변경
*
* @param values 폼명
* @param k 변경할 inputName
* @param v 변경할 inputValue
*/
function changeSerialize(values, k, v) {
var found = false;
for (i = 0; i < values.length && !found; i++) {
if (values[i].name == k) {
values[i].value = v;
found = true;
}
}
 
if (!found) {
values.push({name: k,value: v});
}
return values;
}
 
$(document).ready(function () {
$formLogin = $('#formLogin');
$formLogin.validate({
required: "{=__('패스워드를 입력해주세요')}"
}
}, submitHandler: function (form) {
// 로그인 정보 암호화 처리 (보안이슈)
var encryptLoginId = Encryption.encrypt($('#loginId').val(),$('#secretKey').val());
var encryptLoginPwd = Encryption.encrypt($('#loginPwd').val(),$('#secretKey').val());
 
if (isMyapp) {
form.encryptLoginId.value = encryptLoginId;
form.encryptLoginPwd.value = encryptLoginPwd;
form.target = 'ifrmProcess';
form.submit();
} else {
}
 
var params = $(form).serializeArray();
params = changeSerialize(params, 'loginId', encryptLoginId); // 암호화 된 아이디로 변경
params = changeSerialize(params, 'loginPwd', encryptLoginPwd); // 암호화 된 패스워드로 변경
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;
 
변경 후login.html
<input type="hidden" name="saveFlag" value="{data.saveFlag}"/>
<input type="hidden" id="mode" name="mode" value="{modeLogin}"/>
<input type="hidden" id="isMyapp" name="isMyapp" value="{isMyapp}"/>
 
 
 
 
<div class="inp_tx">
<label for="loginId" class="blind">{=__('아이디')}</label>
<input type="text" id="loginId" name="loginId" value="{data.loginId}" placeholder="{=__('아이디')}">
var $formLogin;
var isMyapp = $('#isMyapp').val();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$(document).ready(function () {
$formLogin = $('#formLogin');
$formLogin.validate({
required: "{=__('패스워드를 입력해주세요')}"
}
}, submitHandler: function (form) {
 
 
 
 
if (isMyapp) {
 
 
form.target = 'ifrmProcess';
form.submit();
} else {
}
 
var params = $(form).serializeArray();
 
 
$.post('../member/login_ps.php', params).done(function (data) {
var code = data.code;
var message = data.message;