login_password_check($mb, $pass, $hash) 함수관련

login_password_check($mb, $pass, $hash) 함수관련

QA

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를 추가하고 그 값을 유지하려 한게 아닐까 싶어요

답변을 작성하시기 전에 로그인 해주세요.
전체 123,532 | RSS
QA 내용 검색

회원로그인

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