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; } В итоге получилось, что можно заходить под любым паролем.
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 ) ) ) ); }
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.