아이디 비밀번호 찾기 임시비밀번호 관련

아이디 비밀번호 찾기 임시비밀번호 관련

QA

아이디 비밀번호 찾기 임시비밀번호 관련

본문


// 임시비밀번호와 난수를 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);

 

이 구간에서 임시비밀번호와 난수를 g5_member 테이블 mb_lost_certify 필드에 값이 들어가야 하는데 값이 들어가지 않습니다. 

 

기존 아이디 비밀번호 찾기를 아이디찾기 따로 비밀번호 찾기 따로 만들었는데 아이디 찾기는 정상적으로 작동하나 비밀번호 찾기는 mb_lost_certify 해당 필드에 값이 들어가지 않습니다 ..

 


$sql = " update {$g5['member_table']} set mb_lost_certify = 'ABC' where mb_id = '{$mb['mb_id']}' ";

 

이렇게 처리하면 ABC 라는 값은 정상적으로 들어가는걸 보아하니 다른쪽 문제가 아니라 

 

mb_lost_certify 값으로 사용될 변수 $mb_nonce, $mb_lost_certify 가 들어가지 않습니다..

 


// 임시비밀번호 발급
$change_password = rand(100000, 999999);
$mb_lost_certify = get_encrypt_string($change_password);
// 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
$mb_nonce = md5(pack('V*', rand(), rand(), rand(), rand()));

 

혹시 $mb_nonce, $mb_lost_certify 이 2개의 값에 문제가 있는지 확인하려고 alert 으로 값을 띄워보니 값은 정상적으로 들어가있는데 이상하게 DB 에만 들어가지 않습니다 ㅠㅠ

이 질문에 댓글 쓰기 :

답변 2

값이 정확히 있다면 이렇게 해보세요

$sql = " update {$g5['member_table']} set mb_lost_certify = '".$mb_nonce." ".$mb_lost_certify."' where mb_id = '{$mb['mb_id']}' ";
sql_query($sql);

값이 안들어가네요 ㅠㅠ

$sql = " update {$g5['member_table']} set mb_lost_certify = '".$mb_nonce."' where mb_id = '{$mb['mb_id']}' ";

이렇게 한개만 넣으면 잘 들어갑니다..

근데 $sql = " update {$g5['member_table']} set mb_lost_certify = '".$mb_lost_certify."' where mb_id = '{$mb['mb_id']}' ";

이 값은 안들어갑니다.

alert 으로 값이 있나 체크해봤는데 값은 정상적으로 들어가있고 alert 으로

alert($mb_nonce."여백".$mb_lost_certify); 하면 문제없이 값 2개가 잘 나옵니다 ㅠㅠ

심지어 수정안한 원본도 안들어가고 있는 상황입니다..

원본소스 그대로 붙여서 처리해도 안들어가고 있어서 이유를 못찾겠네요.

인증용 코드 지우는 쿼리문은 비밀번호 변경 링크를 클릭해야 작동하는 방식인데 왜 지워지는건지 모르겠습니다 ㅠㅠ

인증용 코드 지우는 쿼리문은 비밀번호 변경 링크를 클릭해야 작동하는 방식인데 왜 지워지는건지 모르겠습니다 ㅠㅠ

이내용이 무슨 말인지요?

전체 소스를 보여주세요


<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');

if ($is_member) {
    alert_close('이미 로그인중입니다.', G5_URL);
}

$email = trim($_POST['mb_email']);

if (!$email)
    alert_close('메일주소 오류입니다.');

$sql = " select count(*) as cnt from {$g5['member_table']} where mb_email = '$email' ";
$row = sql_fetch($sql);
if ($row['cnt'] > 1)
    alert('동일한 메일주소가 2개 이상 존재합니다.\\n\\n관리자에게 문의하여 주십시오.');

$sql = " select mb_no, mb_id, mb_name, mb_nick, mb_email, mb_datetime from {$g5['member_table']} where mb_email = '$email' ";
$mb = sql_fetch($sql);
if (!$mb['mb_id'])
    alert('존재하지 않는 회원입니다.');
else if (is_admin($mb['mb_id']))
    alert('관리자 아이디는 접근 불가합니다.');

// 임시비밀번호 발급
$change_password = rand(100000, 999999);
$mb_lost_certify = get_encrypt_string($change_password);

// 어떠한 회원정보도 포함되지 않은 일회용 난수를 생성하여 인증에 사용
$mb_nonce = md5(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);

// 인증 링크 생성
$href = G5_BBS_URL.'/password_lost_certify.php?mb_no='.$mb['mb_no'].'&amp;mb_nonce='.$mb_nonce;

$subject = "[".$config['cf_title']."] 요청하신 회원정보 찾기 안내 메일입니다.";

$content = "";

$content .= '<div style="margin:30px auto;width:600px;border:10px solid #f7f7f7">';
$content .= '<div style="border:1px solid #dedede">';
$content .= '<h1 style="padding:30px 30px 0;background:#f7f7f7;color:#555;font-size:1.4em">';
$content .= '회원정보 찾기 안내';
$content .= '</h1>';
$content .= '<span style="display:block;padding:10px 30px 30px;background:#f7f7f7;text-align:right">';
$content .= '<a href="'.G5_URL.'" target="_blank">'.$config['cf_title'].'</a>';
$content .= '</span>';
$content .= '<p style="margin:20px 0 0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
$content .= addslashes($mb['mb_name'])." (".addslashes($mb['mb_nick']).")"." 회원님은 ".G5_TIME_YMDHIS." 에 회원정보 찾기 요청을 하셨습니다.<br>";
$content .= '저희 사이트는 관리자라도 회원님의 비밀번호를 알 수 없기 때문에, 비밀번호를 알려드리는 대신 새로운 비밀번호를 생성하여 안내 해드리고 있습니다.<br>';
$content .= '아래에서 변경될 비밀번호를 확인하신 후, <span style="color:#ff3061"><strong>비밀번호 변경</strong> 링크를 클릭 하십시오.</span><br>';
$content .= '비밀번호가 변경되었다는 인증 메세지가 출력되면, 홈페이지에서 회원아이디와 변경된 비밀번호를 입력하시고 로그인 하십시오.<br>';
$content .= '로그인 후에는 정보수정 메뉴에서 새로운 비밀번호로 변경해 주십시오.';
$content .= '</p>';
$content .= '<p style="margin:0;padding:30px 30px 30px;border-bottom:1px solid #eee;line-height:1.7em">';
$content .= '<span style="display:inline-block;width:100px">회원아이디</span> '.$mb['mb_id'].'<br>';
$content .= '<span style="display:inline-block;width:100px">변경될 비밀번호</span> <strong style="color:#ff3061">'.$change_password.'</strong>';
$content .= '</p>';
$content .= '<a href="'.$href.'" target="_blank" style="display:block;padding:30px 0;background:#484848;color:#fff;text-decoration:none;text-align:center">비밀번호 변경</a>';
$content .= '</div>';
$content .= '</div>';

mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $mb['mb_email'], $subject, $content, 1);

alert_close($email.' 메일로 회원아이디와 비밀번호를 인증할 수 있는 메일이 발송 되었습니다.\\n\\n메일을 확인하여 주십시오.');
?>



이게 수정 안한 /bbs/password_lost2.php 파일 입니다.



<?php
include_once('./_common.php');

// 오류시 공히 Error 라고 처리하는 것은 회원정보가 있는지? 비밀번호가 틀린지? 를 알아보려는 해킹에 대비한것

$mb_no = trim($_GET['mb_no']);
$mb_nonce = trim($_GET['mb_nonce']);

// 회원아이디가 아닌 회원고유번호로 회원정보를 구한다.
$sql = " select mb_id, mb_lost_certify from {$g5['member_table']} where mb_no = '$mb_no' ";
$mb  = sql_fetch($sql);
if (strlen($mb['mb_lost_certify']) < 33)
    die("Error");

// 인증 링크는 한번만 처리가 되게 한다.
// 이 부분에서 인증용 난수 + 임시비밀번호 값을 비우고 있습니다.
sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");

// 인증을 위한 난수가 제대로 넘어온 경우 임시비밀번호를 실제 비밀번호로 바꿔준다.
if ($mb_nonce === substr($mb['mb_lost_certify'], 0, 32)) {
    $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');
}
else {
    die("Error");
}
?>




이 페이지는 수정할 필요가 없어서 그냥 사용하고 있습니다.

/bbs/password_lost_certify.php 파일 입니다.

이 부분에서 인증용 난수 + 임시비밀번호 값을 비우고 있습니다.

sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");

메일 발송하면 /bbs/password_lost_certify.php?mb_no=14&mb_nonce=b4ba680da517c0e64aed86e54079ab75

이런식으로 링크가 날라오는데 password_lost_certify.php 에 접근해야 위에 코드가 작동할텐데 메일 발송한 시점에서 값이 안들어가있습니다 ㅠㅠ

네 ㅠㅠ 수정 안한 소스도 값이 안들어가고 있습니다..

메일은 정상적으로 날라오는데 DB 확인해보면 값이 없고

링크 클릭하면


if (strlen($mb['mb_lost_certify']) < 33)
    die("Error");


해당 부분에서 값이 없어서 Error 출력하고 종료합니다.

서버 환경은 카페 24 호스팅 받고 있고 os 는 리눅스 사용중입니다.

php 버전은 5.5.17 사용중입니다.

도움주셔서 감사합니다 ㅠㅠ

제가 잘못이해하고 있는건지..

순서가

1. 비밀번호 찾기 버튼 누르면 /bbs/password_lost2.php 실행

2. $email 이 제대로 넘어왔는지 체크

3. 중복된 이메일이 있는지

4. 없다면 해당 이메일로 회원정보 조회 후 쿼리 발송

5. $mb 에 값을 담아두고 mb_id 값이 비어있는지 체크 or 관리자 계정인지 체크

6. 임시비밀번호 발급 후 get_encrypt_string 로 암호화

7. 인증용 난수 생성

8. 난수 + 임시비밀번호 값 mb_lost_certify 필드에 저장

9. 이메일 발송

이 /bbs/password_lost2.php 이 파일에서 작동하는 순서가 아닌가요 ?

그 이후 메일에 있는 비밀번호 변경 버튼을 누르면

/bbs/password_lost_certify.php?mb_no=14&mb_nonce=e9d5a413325c8028d4132f39ce61100b

1. /bbs/password_lost_certify.php 실행

2. 회원번호로 회원정보 조회

3. $mb 에 값을 담아두고 mb_lost_certify 의 필드값 길이가 33 글자가 넘어가는지 체크 or 짧다면 Error 출력

4. 인증용 mb_password 필드값 제거

5. GET 방식으로 받아온 mb_nonce 와 db 에 등록되어있는 mb_lost_certify 0 ~ 32 자리 값 비교 후 일치하면 33 ~ 끝자리 까지 비밀번호로 사용 DB 등록

6. 비밀번호 변경 후 alert 처리.

이 순서가 아닌가요 ?

/bbs/password_lost_certify.php 이 페이지가 실행되야

sql_query(" update {$g5['member_table']} set mb_lost_certify = '' where mb_no = '$mb_no' ");

해당 쿼리가 작동해야 하는거같은데.. 혹시 제가 틀린건가요 ?

조건절이 틀리지 않았을까요?

해당 값이 어디로 들어가야 하는지 살펴보세요....

조건이 틀렸다면

$sql = " update {$g5['member_table']} set mb_lost_certify = 'ABC' where mb_id = '{$mb['mb_id']}' ";

이 sql 도 작동 안해야 하는데 DB 확인해보니 ABC 는 제대로 들어갑니다 ㅠㅠ

이상하게 변수값은 안들어가고 있네요..

답변을 작성하시기 전에 로그인 해주세요.
전체 126,576 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT