회원정보찾기 인증 URL에 들어가는 난수 개선 - 성기진님 제공 코드

This commit is contained in:
chicpro
2014-08-19 14:37:57 +09:00
parent 426004e795
commit 916f079ecc
2 changed files with 17 additions and 14 deletions

View File

@ -28,16 +28,19 @@ if (!$mb['mb_id'])
else if (is_admin($mb['mb_id'])) else if (is_admin($mb['mb_id']))
alert('관리자 아이디는 접근 불가합니다.'); alert('관리자 아이디는 접근 불가합니다.');
// 난수 // 임시비밀번호
srand(time());
$change_password = rand(100000, 999999); $change_password = rand(100000, 999999);
$mb_lost_certify = sql_password($change_password); $mb_lost_certify = sql_password($change_password);
$mb_datetime = sql_password($mb['mb_datetime']);
$sql = " update {$g5['member_table']} set mb_lost_certify = '$mb_lost_certify' where mb_id = '{$mb['mb_id']}' "; // 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
$mb_nonce = bin2hex(pack('V*', rand(), rand(), rand(), rand()));
// 임시비밀번호와 난수를 mb_lost_certify 필드에 저장
$sql = " update {$g5['member_table']} set mb_lost_certify = '$mb_nonce $mb_lost_certify' where mb_id = '{$mb['mb_id']}' ";
sql_query($sql); sql_query($sql);
$href = G5_BBS_URL.'/password_lost_certify.php?mb_no='.$mb['mb_no'].'&mb_datetime='.$mb_datetime.'&mb_lost_certify='.$mb_lost_certify; // 인증 링크 생성
$href = G5_BBS_URL.'/password_lost_certify.php?mb_no='.$mb['mb_no'].'&mb_nonce='.$mb_nonce;
$subject = "[".$config['cf_title']."] 요청하신 회원정보 찾기 안내 메일입니다."; $subject = "[".$config['cf_title']."] 요청하신 회원정보 찾기 안내 메일입니다.";

View File

@ -4,21 +4,21 @@ include_once('./_common.php');
// 오류시 공히 Error 라고 처리하는 것은 회원정보가 있는지? 비밀번호가 틀린지? 를 알아보려는 해킹에 대비한것 // 오류시 공히 Error 라고 처리하는 것은 회원정보가 있는지? 비밀번호가 틀린지? 를 알아보려는 해킹에 대비한것
$mb_no = trim($_GET['mb_no']); $mb_no = trim($_GET['mb_no']);
$mb_datetime = trim($_GET['mb_datetime']); $mb_nonce = trim($_GET['mb_nonce']);
$mb_lost_certify = trim($_GET['mb_lost_certify']);
// 회원아이디가 아닌 회원고유번호로 회원정보를 구한다. // 회원아이디가 아닌 회원고유번호로 회원정보를 구한다.
$sql = " select mb_id, mb_datetime, mb_lost_certify from {$g5['member_table']} where mb_no = '$mb_no' "; $sql = " select mb_id, mb_lost_certify from {$g5['member_table']} where mb_no = '$mb_no' ";
$mb = sql_fetch($sql); $mb = sql_fetch($sql);
if (!trim($mb['mb_lost_certify'])) if (strlen($mb['mb_lost_certify']) < 33)
die("Error"); die("Error");
// 인증 링크는 한번만 처리가 되게 한다. // 인증 링크는 한번만 처리가 되게 한다.
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' "); sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");
// 변경될 비밀번호가 넘어와야하고 저장된 변경비밀번호를 md5 로 변환하여 같으면 정상 // 인증을 위한 난수가 제대로 넘어온 경우 임시비밀번호를 실제 비밀번호로 바꿔준다.
if ($mb_lost_certify && $mb_datetime === sql_password($mb['mb_datetime']) && $mb_lost_certify === $mb['mb_lost_certify']) { if ($mb_nonce === substr($mb['mb_lost_certify'], 0, 32)) {
sql_query(" update {$g5['member_table']} set mb_password = '{$mb['mb_lost_certify']}' where mb_no = '$mb_no' "); $new_password_hash = substr($mb['mb_lost_certify'], 33);
sql_query(" update {$g5['member_table']} set mb_password = '$new_password_hash' where mb_no = '$mb_no' ");
alert('비밀번호가 변경됐습니다.\\n\\n회원아이디와 변경된 비밀번호로 로그인 하시기 바랍니다.', G5_BBS_URL.'/login.php'); alert('비밀번호가 변경됐습니다.\\n\\n회원아이디와 변경된 비밀번호로 로그인 하시기 바랍니다.', G5_BBS_URL.'/login.php');
} }
else { else {