Jump to content

Featured Replies

Posted
comment_148540

Здравствуйте.

После обновление до 4.3.3 форум перестал пускать с паролями в двойном md5. В Member.php пропала функция encryptedPassword, которая и отвечала за расшифровку и перехэширование таких паролей. Сталкивался ли кто-либо с такой проблемой и в каком направлении можно пойти, чтобы решить данную проблему?

Также нашёл функцию authenticatePasswordForMember в файле system/Login/Handler/Standard/Standard.php, которая судя по всему и отвечает за вход пользователя, однако работает некорректно.

Изначальный код:

public function authenticatePasswordForMember( \IPS\Member $member, $password )
	{
		if ( password_verify( $password, $member->members_pass_hash ) === TRUE )
		{
			return TRUE;
		}
		elseif ( $member->members_pass_salt and mb_strlen( $member->members_pass_hash ) === 32 )
		{
			return $member->verifyLegacyPassword( $password );
		}
		
		return FALSE;
	}

Моя попытка исправить код:

public function authenticatePasswordForMember( \IPS\Member $member, $password )
	{
		if ( password_verify( $password, $member->members_pass_hash ) === TRUE )
		{
			return TRUE;
		}
		elseif ( md5 ( md5 ($password) ) == $member->members_pass_hash )
		{
			return TRUE;
		}
		
		return FALSE;
	}

В итоге получилось, что можно заходить под любым паролем.

  • Author
comment_148545

В итоге в Standard.php убрал "$member->members_pass_salt and ", так как зачем это там, если соли у хеша в md5 нет.

public function authenticatePasswordForMember( \IPS\Member $member, $password )
	{
		if ( password_verify( $password, $member->members_pass_hash ) === TRUE )
		{
			return TRUE;
		}
		elseif ( mb_strlen( $member->members_pass_hash ) === 32 )
		{
			return $member->verifyLegacyPassword( $password );
		}
		
		return FALSE;
	}

Затем поменял в Member.php функцию verifyLegacyPassword, так как в ней сравнивались очень странные вещи, на мой взгляд.

Было:

public function verifyLegacyPassword( $password )
	{
		return \IPS\Login::compareHashes( $this->members_pass_hash, md5( md5( $this->members_pass_salt ) . md5( \IPS\Request::legacyEscape( $password ) ) ) );
	}

Стало:

public function verifyLegacyPassword( $password )
	{
		return \IPS\Login::compareHashes( $this->members_pass_hash  , md5( md5 ( \IPS\Request::legacyEscape( $password ) ) ) );
	}

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.