테스트 사이트 - 개발 중인 베타 버전입니다

login_password_check($mb, $pass, $hash) 함수관련 채택완료

김무식2 2년 전 조회 1,312

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개

채택된 답변
+20 포인트
그누위즈

맞습니다.

</p>

<p>if(G5_STRING_ENCRYPT_FUNCTION === 'create_hash' && (strlen($hash) === G5_MYSQL_PASSWORD_LENGTH || strlen($hash) === 16)) {</p>

<p>~~</p>

<p>} </p>

<p>

해당 함수는 로그인시 사용되는 함수이며,

함수내부에 있는 조건문이 어느 상황에서 실행을 하는지는 정확하지는 않지만

보통은 해당 조건문에 부합하지 않으므로,

함수의 가장 아래에 부분에있는

</p>

<p>return check_password($pass, $hash);</p>

<p>

함수를 실행하므로 해당 함수는 끝이납니다.

 

해당 코드 자체가 구버전의 그누보드를 사용하다 최신 버전으로 바꾼경우

암호화 형식이 업데이트되면서 기존 암호화를 쓰던 사람들은

모두 mb_password 필드에는 41자리의 암호가 들어갔습니다.

 

그럴때 mb_password2 필드가 추가되고, 이후 mb_password를 업데이트하는 구문이기때문에

사실상 코드하나에 집착해서 분석을 할 필요는 없습니다.

다만 이럴때 사용되겠구나~ 하고 추측만 하셔도 충분합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

2년 전

제 생각으로는 이전에 그누보드에서 운영했던 패스워드 방식이 md5기준 16자리였나 할테고..

추후 패스워드 체계를 바꿨을 때가 41자리로 바꾼게 아닐까 싶네요..

그래서 if문 구절을 보면 member테이블에 password2를 추가하고 그 값을 유지하려 한게 아닐까 싶어요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

PHP, MySQL 버전이 어떻게 되나요?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

김무식2
2년 전
php 버전 : 8.0.3
mysql 버전 : 8.0.23
입니다
엑스엠엘
2년 전
이렇게 생각하시면 간단합니다.
function login_password_check($mb, $pass, $hash)
{
if()은 예외 사항 처리
return check_password($pass, $hash);
}

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인