상당히 특이한 경우지만 저처럼 걸리는 경우가 있어서 -_-
혹시 필요하실 분들을 위해 올립니다.
제로보드와 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를 돌려주게 됩니다. 즉, 회원정보를 옮겨오면
로그인이 안되는것이죠.
다음과 같이하면 됩니다.
common.lib.php에 아래 함수를 넣어줍니다.
function sql_old_password($value)
{
$row = sql_fetch(" select old_password('$value') as pass ");
return $row[pass];
}
그리고 login_check.php의 15번째줄을
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패스워드는 대소문자를 구분합니다.");
}
}
로 바꾸어 줍니다. 더 간단하게도 쓸수 있지만 논리 에러를 내지 않으려고 일부러 길게 썼습니다.
그리고 register_form.php의 66-67번째 줄을
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바이트짜리로 바꾸었을경우에는 위에 바꾼것을 원래대로
돌려 놓는것이 좋습니다.
혹시 필요하실 분들을 위해 올립니다.
제로보드와 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를 돌려주게 됩니다. 즉, 회원정보를 옮겨오면
로그인이 안되는것이죠.
다음과 같이하면 됩니다.
common.lib.php에 아래 함수를 넣어줍니다.
function sql_old_password($value)
{
$row = sql_fetch(" select old_password('$value') as pass ");
return $row[pass];
}
그리고 login_check.php의 15번째줄을
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패스워드는 대소문자를 구분합니다.");
}
}
로 바꾸어 줍니다. 더 간단하게도 쓸수 있지만 논리 에러를 내지 않으려고 일부러 길게 썼습니다.
그리고 register_form.php의 66-67번째 줄을
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바이트짜리로 바꾸었을경우에는 위에 바꾼것을 원래대로
돌려 놓는것이 좋습니다.
댓글 28개
회원정보 수정시 문제가 있습니다.
최신버젼을 깔았더니, 위 코드는 주석처리되서 인제는 사용하지 않은 코드라서요.
그래서, 위에서 말씀하신 이것을
----------------------------------------------------------
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("패스워드가 틀립니다.");
-------------------------------------------------
바뀐 코드에맞도록, 이렇게 바꿔야 됩니다. ^^
if ($_POST['mb_password']) {
// 수정된 정보를 업데이트후 되돌아 온것이라면 패스워드가 암호화 된채로 넘어온것임
if ($_POST['is_update'])
$tmp_password = $_POST['mb_password'];
else
{
$tmp_password = sql_password($_POST['mb_password']);
$tmp_old_password = sql_old_password($_POST['mb_password']);
}
if ($member['mb_password'] != $tmp_password && $member['mb_password'] != $tmp_old_password)
alert("패스워드가 틀립니다.");
}
최신버젼을 깔았더니, 위 코드는 주석처리되서 인제는 사용하지 않은 코드라서요.
그래서, 위에서 말씀하신 이것을
----------------------------------------------------------
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("패스워드가 틀립니다.");
-------------------------------------------------
바뀐 코드에맞도록, 이렇게 바꿔야 됩니다. ^^
if ($_POST['mb_password']) {
// 수정된 정보를 업데이트후 되돌아 온것이라면 패스워드가 암호화 된채로 넘어온것임
if ($_POST['is_update'])
$tmp_password = $_POST['mb_password'];
else
{
$tmp_password = sql_password($_POST['mb_password']);
$tmp_old_password = sql_old_password($_POST['mb_password']);
}
if ($member['mb_password'] != $tmp_password && $member['mb_password'] != $tmp_old_password)
alert("패스워드가 틀립니다.");
}
게시글 목록
| 번호 | 제목 |
|---|---|
| 903 | |
| 898 | |
| 895 | |
| 882 | |
| 877 | |
| 875 | |
| 872 | |
| 867 | |
| 863 | |
| 860 | |
| 857 | |
| 848 | |
| 840 | |
| 832 | |
| 827 | |
| 812 | |
| 811 | |
| 800 | |
| 793 | |
| 776 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기