5.3 버전에서 5.4 버전으로 업데이트시 로그인 불가현상 해결하기 > 그누보드5 팁자료실

그누보드5 팁자료실

5.3 버전에서 5.4 버전으로 업데이트시 로그인 불가현상 해결하기 정보

5.3 버전에서 5.4 버전으로 업데이트시 로그인 불가현상 해결하기

본문

 5.3 버전에서 5.4 버전으로 업데이트시 로그인 불가현상이 일어날수 있는 예와 문제를 해결할수 있는 방법에 대해 설명하겠습니다.

 

그누보드 5.3 버전 이하에는 비밀번호 암호화 방식을 MYSQL PASSWORD 를 사용했으나, MYSQL 8.0 이상부터는 해당 함수가 없어져서 이에 대응하기 위해 그누보드 5.4 버전 이상부터는 비밀번호 암호화 방식을 PBKDF2으로 변경하게 되었습니다.

 

기존에 5.3 이하버전까지는 MYSQL PASSWORD 방식으로 회원 db 테이블에 아래와 같이 저장되었습니다.

 

1-1 표

회원번호 회원아이디 회원패스워드hash
1 abcd mysql password(비밀번호)

 

 

5.3 버전을 사용했던 사이트가 5.4 버전으로 업데이트하면 아래와 같이 변경됩니다. ( 한꺼번에 다 바뀌지 않고, 해당 회원 로그인 성공시 변경됩니다. 차곡차곡 변경됩니다. )

 

2-1 표

회원번호 회원아이디 회원패스워드hash 회원패스워드백업hash
1 abcd PBKDF2(비밀번호) mysql password(비밀번호)

 

 

패스워드 암호화하는 함수는 config.php 파일에서 지정할수 있습니다.

5.3 이하에서는 sql_password 함수( MYSQL PASSWORD )를 사용했으며, 5.4이상 부터는 create_hash 함수( PBKDF2 )를 사용합니다.

 

5.3 버전 config.php 파일 대략 167번째 줄

 


// 암호화 함수 지정
// 사이트 운영 중 설정을 변경하면 로그인이 안되는 등의 문제가 발생합니다.
define('G5_STRING_ENCRYPT_FUNCTION', 'sql_password');

 

5.4 버전 config.php 변경된 코드

 


// 암호화 함수 지정
// 사이트 운영 중 설정을 변경하면 로그인이 안되는 등의 문제가 발생합니다.
// 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

 

그러니 5.3 버전에서 5.4 버전으로 업데이트 하는 경우이면 반드시 백업(mysql, 파일)을 해 놓고 진행해야 합니다.

업데이트 하기전에 config.php 파일을 확인해서

define('G5_STRING_ENCRYPT_FUNCTION',

 

위의 상수값을 반드시 기억해 놓으시기 바랍니다.

 

sql_password 라고 되어 있다면 로그인 성공시 create_hash 함수를 이용해서 자동으로 변경되게 해 놓았기 때문에, 위의 2-1 표처럼 잘 변환되고 로그인도 잘 되고 문제가 없을겁니다.

 

sql_password 라고 안되어 있다면 이 것은 사용자가 임의로 코드를 수정한 경우입니다. 이 경우에는 로그인 불가현상이 일어납니다.

 

5.4 버전으로 업데이트 하고 난 후 불가현상이 일어난다면

 

define('G5_STRING_ENCRYPT_FUNCTION', 'create_hash'); 코드를

 

define('G5_STRING_ENCRYPT_FUNCTION', '이전에사용했던상수값'); 으로 변경하면 로그인 할수 있습니다.

 

이거 외에 다른 문제가 일어난다면 그건 

관리자페이지 -> 환경설정 -> DB업그레이드 를 하지 않아서 발생하는 문제일수도 있습니다. ( 그러니까 이거 꼭 하세요. )

 

기타 궁금한 점이나 질문이 있다면 댓글로 알려주세요.

 

 

추천
9

댓글 25개

감사합니다.
썸네일에 관련한 팁도 좀 알려주세요 ㅠ_ㅠ
5.3버전에 비해 가장 어려운 부분이 썸네일입니다.

썸네일 함수가 편해진 만큼,수정하기에 초보는 너무 어려운 것 같습니다.
두번째 이미지를 썸네일로 만드는 방법도 이전에는
where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_type between '1' and '3' order by bf_no limit 0, 1 ";
맨 끝의 limit 0, 1 만 바꾸면 됐는데 5.4에서는 어찌해야 할지 ㅠ_ㅠ
/lib/thumbnail.lib.php 파일이 5.3 버전과 5.4 버전이 완전이 다른데 변경된 부분이 없다고 하시니 이해가 가질 않습니다.

위에도 간략히 적었지만 5.3버전에서는 아주 쉽게
function get_list_thumbnail2 를 하나 더 만들고
where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_type between '1' and '3' order by bf_no limit 1, 1 ";
로 바꾼 후에

 get_list_thumbnail2 를 적용하면 2번째 첨부파일을 썸네일로 추출할 수 있었지만
5.4 버전에서는 불가능합니다.
두번째 이미지 썸네일은 아래와 같이 하시면 됩니다.

extend/ 폴더에 아무파일을 만든 다음 아래 코드를 붙여넣기 합니다.

function get_thumbnail_index1($bo_table, $wr_id, $thumb_width, $thumb_height, $is_create=false, $is_crop=false, $crop_mode='center', $is_sharpen=false, $um_value='80/0.5/3')
{
    global $g5, $config;
    $filename = $alt = "";
    $edt = false;

    $sql = " select bf_file, bf_content from {$g5['board_file_table']}
                where bo_table = '$bo_table' and wr_id = '$wr_id' and bf_type between '1' and '3' order by bf_no limit 1, 1 ";
    $row = sql_fetch($sql);

    if($row['bf_file']) {
        $filename = $row['bf_file'];
        $filepath = G5_DATA_PATH.'/file/'.$bo_table;
        $alt = get_text($row['bf_content']);
    } else {
        $write_table = $g5['write_prefix'].$bo_table;
        $sql = " select wr_content from $write_table where wr_id = '$wr_id' ";
        $write = sql_fetch($sql);
        $matches = get_editor_image($write['wr_content'], false);
        $edt = true;
$is_index1 = false;

        if(isset($matches[1]) && is_array($matches[1])){
            for($i=0; $i<count($matches[1]); $i++)
            {
                // 이미지 path 구함
                $p = parse_url($matches[1][$i]);
                if(strpos($p['path'], '/'.G5_DATA_DIR.'/') != 0)
                    $data_path = preg_replace('/^\/.*\/'.G5_DATA_DIR.'/', '/'.G5_DATA_DIR, $p['path']);
                else
                    $data_path = $p['path'];

                $srcfile = G5_PATH.$data_path;

                if(preg_match("/\.({$config['cf_image_extension']})$/i", $srcfile) && is_file($srcfile)) {
                    $size = @getimagesize($srcfile);
                    if(empty($size))
                        continue;

if( ! $is_index1 ){
$is_index1 = true;
continue;
}

                    $filename = basename($srcfile);
                    $filepath = dirname($srcfile);

                    preg_match("/alt=[\"\']?([^\"\']*)[\"\']?/", $matches[0][$i], $malt);
                    $alt = get_text($malt[1]);

                    break;
                }
            }
        }
    }

    if(!$filename)
        return false;

    $tname = thumbnail($filename, $filepath, $filepath, $thumb_width, $thumb_height, $is_create, $is_crop, $crop_mode, $is_sharpen, $um_value);

    if($tname) {
        if($edt) {
            // 오리지날 이미지
            $ori = G5_URL.$data_path;
            // 썸네일 이미지
            $src = G5_URL.str_replace($filename, $tname, $data_path);
        } else {
            $ori = G5_DATA_URL.'/file/'.$bo_table.'/'.$filename;
            $src = G5_DATA_URL.'/file/'.$bo_table.'/'.$tname;
        }
    } else {
        return false;
    }

    $thumb = array("src"=>$src, "ori"=>$ori, "alt"=>$alt);

    return $thumb;
}


그런 다음에 스킨파일에서

if( $thumb2 = get_thumbnail_index1($bo_table, $wr_id, 120, 120, false, true) ){
    echo $thumb2['src'];
}

하면 2번째썸네일 이미지를 출력할수 있습니다.
기존 5.3.x 암호화 방식인 define('G5_STRING_ENCRYPT_FUNCTION', 'sql_password'); 설정 시엔 로그인 문제가 전혀 없는데
5.4.x 암호화 방식인 define('G5_STRING_ENCRYPT_FUNCTION', 'create_hash');로 설정 변경하면
"가입된 회원아이디가 아니거나 비밀번호가 틀립니다.
비밀번호는 대소문자를 구분합니다."
라는 오류 메세지가 뜨며 로그인이 되지 않습니다.

DB는 업그레이드 한 상태인데 로그인이 성공하지 못하기 때문에 create_hash 함수도 동작하지 않아 어찌할 바를 모르겠네요
패치 전 5.3.x 암호화 방식으로 되돌려 놓긴 했는데 살펴보아야 할 다른 부분이 있을까요?
패치를 어떻게 하셨나요?

패치파일을 통째로 덮어쓰우신건지

또는 패치파일을 비교해 가며 일일히 수정하셨는지

후자쪽이면 패치시 빠뜨린 부분이 있나 잘 보셔야 합니다.

해당 사이트 주소와 ftp 접속정보 등을 쪽지로 알려주시면 제가 봐드리겠습니다.
5.3 버젼과 5.4 버젼을 연동해서 같이 사용하면서 서서히 바꾸려고 하는데
5.4에서 로그인에 성공하면 5.3 버변으로 가면 로그인이 실패가 되네요...당분간 같이 사용하는
방법은 없는지요?
감사합니다

새로운 그누보드를 같이 서버에 새로 설치를 했습니다 (5.4 )
5.4 버전으로 로그인 성공하면 위에서 말한대로 password hash 값이 변하기 때문에, 별도의 프로그래밍을 하지 않은한 5.3 버전으로 로그인 할수 있는 방법은 없습니다.
제로보드 데이타를 그누보드 5.4 설치된 곳으로 이전했습니다.
암호화 방식은 16바이트 형식인데,  config.php 에서의 설정만으로는 안되려나 봅니다.
common.lib.php 의 암호화 관련 내용을 살펴봐야 겠네요. 휴...

추가 내용 작성 (2019-12-17 19:30)
config.php 수정없이 암호변경 해결했습니다.
기존 16비트 암호 mb_password 필드의 값은 PBKDF2 로 변경되고
mb_password2 에는 41바이트 형식의 암호로 변경 저장했습니다.
https://www.happyjung.com/lecture/320 업로드
저는 config.php 변수의 41->16 숫자만 바꿔서 성공했네요.
수년동안 그누 4부터 -> 5.1 -> 5.3 -> 5.4로 갔네요... 휴우... 로그인안되어서 첨에 얼마나 놀랐든지...
전체 69 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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