login_password_check($mb, $pass, $hash) 함수관련
본문
common.lib.php에서
function login_password_check($mb, $pass, $hash){
~~
if(G5_STRING_ENCRYPT_FUNCTION === 'create_hash' && (strlen($hash) === G5_MYSQL_PASSWORD_LENGTH || strlen($hash) === 16)) {
~~
}
위 로그인 체크 함수를 보면 if 조건문에 strlen($hash) === G5_MYSQL_PASSWORD_LENGTH 라고 조건이 나오는데 create_hash 함수로 암호를 만들면 78자가 나오는데
config.php에서는 define('G5_MYSQL_PASSWORD_LENGTH', 41); 로 상수선언이 되어 있어
strlen($hash) === G5_MYSQL_PASSWORD_LENGTH
위 조건을 무조건 만족하지 못하게 됩니다
제가 무언가 잘못 이해하고 있거나 더 공부해야 할 부분이 있나요?
답변 3
맞습니다.
if(G5_STRING_ENCRYPT_FUNCTION === 'create_hash' && (strlen($hash) === G5_MYSQL_PASSWORD_LENGTH || strlen($hash) === 16)) {
~~
}
해당 함수는 로그인시 사용되는 함수이며,
함수내부에 있는 조건문이 어느 상황에서 실행을 하는지는 정확하지는 않지만
보통은 해당 조건문에 부합하지 않으므로,
함수의 가장 아래에 부분에있는
return check_password($pass, $hash);
함수를 실행하므로 해당 함수는 끝이납니다.
해당 코드 자체가 구버전의 그누보드를 사용하다 최신 버전으로 바꾼경우
암호화 형식이 업데이트되면서 기존 암호화를 쓰던 사람들은
모두 mb_password 필드에는 41자리의 암호가 들어갔습니다.
그럴때 mb_password2 필드가 추가되고, 이후 mb_password를 업데이트하는 구문이기때문에
사실상 코드하나에 집착해서 분석을 할 필요는 없습니다.
다만 이럴때 사용되겠구나~ 하고 추측만 하셔도 충분합니다.
!-->!-->PHP, MySQL 버전이 어떻게 되나요?
제 생각으로는 이전에 그누보드에서 운영했던 패스워드 방식이 md5기준 16자리였나 할테고..
추후 패스워드 체계를 바꿨을 때가 41자리로 바꾼게 아닐까 싶네요..
그래서 if문 구절을 보면 member테이블에 password2를 추가하고 그 값을 유지하려 한게 아닐까 싶어요