사이트 내 전체검색
PHP
[그누보드] MySQL 4.0이하에서 만들어진 회원들의 정보및 password 데이타를 MySQL 4.1 이상에서 그냥 이용하기 (2008/02/15 수정)
로빈아빠
https://cmd.kr/php/698 URL이 복사되었습니다.

본문

제로보드와 GNU보드 둘다 회원들의 password를 관리할때
MySQL의 password()를 사용하는데 이 함수가 4.0이하와 4.1이상에서
다른 hashing value를 가집니다. 다 아시겠지만 4.0이하는 16바이트,
4.1이상은 40바이트의 hashed value를 가집니다.

패스워드가 모두 옛날 password()함수로 되어있습니다.
최근에 호스트쪽에서 MySQL 4.1.X로 업그레이드를 해서 지금 설치된 그누보드는 password()를 쓸때에 모두 16바이트 대신 40바이트의 hashed value를 돌려주게 됩니다.

즉, 회원정보를 옮겨오면 로그인이 안되는것이죠.

다음과 같이하면 됩니다.


1. 그누보드 / lib / common.lib.php 의 1096번째 줄에
function sql_password($value) 를 검색해서 아래와 같이 함수를 추가합니다.

function sql_old_password($value)
{
    $row = sql_fetch(" select old_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 password('$value') as pass ");
    return $row[pass];
}



2. 그누보드 / bbs / login_check.php의 25번째줄의
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}
를 아래와 같이 수정

if (!$mb[mb_id]) {
  alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
  } else { //id가 있는경우
    if ( (sql_password($mb_password) != $mb[mb_password]) && (sql_old_password($mb_password) != $mb[mb_password]) ) {
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
  }
}

로 바꾸어 줍니다. 더 간단하게도 쓸수 있지만 논리 에러를 내지 않으려고 일부러 길게 썼습니다.



3. 그누보드 / bbs / register_form.php의 73번째 줄을

// 원본
    if (!($member[mb_password] == sql_password($_POST[mb_password]) && $_POST[mb_password]))
        alert("패스워드가 틀립니다.");
// 수정
if (!($member[mb_password] == sql_password($_POST[mb_password]) && $_POST[mb_password]) && !($member[mb_password] == sql_old_password($_POST[mb_password]) && $_POST[mb_password]))
        alert("패스워드가 틀립니다.");


로 바꾸어 줍니다. 회원 정보 수정시에 한번더 비밀번호를 체크하기에 여기도 넣어주어야 합니다.
이렇게 해주면 나중에 회원이 비밀번호를 바꾸었을경우에도 제대로 로그인이 됩니다.

그리고 회원들이 모두 비밀번호를 40바이트짜리로 바꾸었을경우에는 위에 바꾼것을 원래대로 돌려 놓는것이 좋습니다. 


참고자료
에밀 ( http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=1212 )

댓글목록

등록된 댓글이 없습니다.

PHP
871 (6/18P)

Search

Copyright © Cmd 명령어 3.138.105.4