Posted 7 июня, 20186 yr 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; } В итоге получилось, что можно заходить под любым паролем. Link to comment https://ipbmafia.ru/topic/19954-paroli-md5md5-v-433/ Share on other sites Больше вариантов
7 июня, 20186 yr 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 ) ) ) ); } Link to comment https://ipbmafia.ru/topic/19954-paroli-md5md5-v-433/?&do=findComment&comment=148545 Share on other sites Больше вариантов
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.