본문 바로가기
웹쟁이

[그누보드] MySQL 4.0x, MySQL 4.1x 버전에 따른 패스워드 처리

by 블로티 2016. 11. 4.
728x90
반응형

그누보드를 사용하면서 소소한 것 부터 일일 수정하다가 MySQL 버전에 따라 패스워드 처리하는게 달라져 겪었던 일이죠.


MySQL 4.0과 4.1이 패스워드를 강화하다보니 그누보드에서 패스워드 처리 함수를 수정했습니다.


처음엔 이걸 몰라 왜 로그인이 안될까 고민하던 중 그누보드 사이트에 올라온 내용을 보고 알았습니다. 


간혹 찾아볼 경우를 대비하여 이렇게 정리해 봅니다.



우선, 가장 편한 방법은 


/lib/common.lib.php 에 다음 함수의 'password'를 'old_password'로 수정합니다.


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 sql_password($value)

{

    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes

    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes

    $row = sql_fetch(" select old_password('$value') as pass ");

    return $row[pass];

}


그러나, 원래 함수는 수정하지 않고 아래와 같이 함수를 추가하여 사용하는 분도 계신다네요.


1. /lib/common.lib.php 에 다음 함수를 추가합니다.

 

function sql_old_password($value)

{

    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes

    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes

    $row = sql_fetch(" select old_password('$value') as pass ");

    return $row[pass];

}

 

 

2. /bbs/login_check.php에서 다음과 같이 수정 합니다.


if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {

    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");

}

을  

if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password] and sql_old_password($mb_password) != $mb[mb_password])) {

    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");

}

 로 수정합니다.

 

3. /bbs/register_form.php에서 다음과 같이 수정

 

    if (($member[mb_password] == sql_password($_POST[mb_password]) and $member[mb_password] == sql_old_password($_POST[mb_password])) && $_POST[mb_password])



위와 같은 좋은 정보 주신 분들께 감사합니다.

728x90
반응형