그누보드 업데이트시 DB 업그레이드로 인해 로그인이 안되는 문제 해결 방법 > 개발

본문 바로가기
사이트 내 전체검색

개발

그누보드 업데이트시 DB 업그레이드로 인해 로그인이 안되는 문제 해결 방법

페이지 정보

profile_image
작성자 관리자 (119.♡.119.69)
댓글 0건 조회 378회 작성일 23-11-04 23:48

본문

1. 우선, config.php 파일의 188행 쯤에 아래와 같은 안내가 있다.

```
// 암호화 함수 지정
// 사이트 운영 중 설정을 변경하면 로그인이 안되는 등의 문제가 발생합니다.
// 5.4 버전 이전에는 sql_password 이 사용됨, 5.4 버전부터 기본이 create_hash 로 변경
//define('G5_STRING_ENCRYPT_FUNCTION', 'sql_password');
define('G5_STRING_ENCRYPT_FUNCTION', 'create_hash');
define('G5_MYSQL_PASSWORD_LENGTH', 41);        // mysql password length 41, old_password 의 경우에는 16
```


2. 그리고, 로그인 체크를 위한 새로운 함수가 있다.

bbs/login_check.php 안에 보면, check_password 대신 login_password_check 함수가 사용되고,
이 함수는 lib/common.lib.php 안에 있다.

```
function sql_password($value)
{
    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
    $row = sql_fetch(" SELECT password('{$value}') as pass ");

    return $row['pass'];
}

....

// 문자열 암호화
function get_encrypt_string($str)
{
    if(defined('G5_STRING_ENCRYPT_FUNCTION') && G5_STRING_ENCRYPT_FUNCTION) {
        $encrypt = call_user_func(G5_STRING_ENCRYPT_FUNCTION, $str);
    } else {
        $encrypt = sql_password($str);
    }

    return $encrypt;
}

// 비밀번호 비교
function check_password($pass, $hash)
{
    if(defined('G5_STRING_ENCRYPT_FUNCTION') && G5_STRING_ENCRYPT_FUNCTION === 'create_hash') {
        return validate_password($pass, $hash);
    }

    $password = get_encrypt_string($pass);

    return ($password === $hash);
}

// 로그인 패스워드 체크
function login_password_check($mb, $pass, $hash)
{
    global $g5;

    $mb_id = isset($mb['mb_id']) ? $mb['mb_id'] : '';

    if(!$mb_id)
        return false;

    if(G5_STRING_ENCRYPT_FUNCTION === 'create_hash' && (strlen($hash) === G5_MYSQL_PASSWORD_LENGTH || strlen($hash) === 16)) {
        if( sql_password($pass) === $hash ){

            if( ! isset($mb['mb_password2']) ){
                $sql = "ALTER TABLE `{$g5['member_table']}` ADD `mb_password2` varchar(255) NOT NULL default '' AFTER `mb_password`";
                sql_query($sql);
            }
           
            $new_password = create_hash($pass);
            $sql = " update {$g5['member_table']} set mb_password = '$new_password', mb_password2 = '$hash' where mb_id = '$mb_id' ";
            sql_query($sql);
            return true;
        }
    }

    return check_password($pass, $hash);
}
```
참고로, 위 create_hash, validate_password 함수는 lib/pbkdf2.compat.php 에 있다.




3. 소스는 그대로 두고, DB 를 수정할 수 있는 권한이 있는 경우


디비 관리자일 경우, 해당 계정의 비밀번호를 알고 있다는 가정 하에, 소스는 그대로 두고, DB 값만 변경해 임시로 사용할 수도 있다.

DB 에서 아래과 같은 쿼리문으로 길이 41 짜리 해시값을 만들어서,
```
select PASSWORD('비밀번호') as pass
```
g5_member 테이블에 mb_password 값을 업데이트 해 주면, 기존 비번으로 로그인이 된다.

추천0

댓글목록

등록된 댓글이 없습니다.

Total 386건 1 페이지
  • RSS
개발 목록
번호 제목 조회 추천 날짜
386144004-07
385680002-02
384803001-09
383959012-25
382904012-15
381756012-10
380377012-03
379399011-26
열람중379011-04
377964009-08
3761196008-11
3751289008-10
3741569007-10
3731079007-03
3721477006-06
3711282004-23
3701270004-20
3692287004-19
368970004-12
3671599004-11

검색


사이트 정보

Copyright © Baragi.Net. All rights reserved.