Перейти к содержанию
Авторизация  
Martali

Проблема с ghtweb 5

Рекомендуемые сообщения

Доброго времени суток.
Не могу разобраться, как работает связь обвязки Ghtweb 5.1.3 (взята с Github'a) и ява-сборки jts 2018 года. Сам логин и игровой сервер запущены и работают.
Развернул и настроил Ghtweb 5, отображает онлайн сервера, список игроков, топ ПВП/ПК.
Проблема с созданием аккаунта на сайте. После успешной регистрации, учётные данные принимаются сайтом. Стоит зайти на логин сервер, даже до выбора сервера, в ЛК на сайт уже не попасть.
Опытным путём и чтением результатов запроса в Гугл, причиной считаю разную генерацию хэшей БД сайта и логин сервера.
При авторизации на сайте хэш имеет такой вид: faf200037c7b4290662d57f0ee59a450 (поле hash_auth), на логин сервере — fEqNCco3Yq9h5ZUglD3CZJT4lBs=(поле password). После авторизации на логин сервере значение поле password становится вида — sha1:1000:BKUtFOSowxjReuJ2InqAesCMSOOmUo3q:RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW и зайти в ЛК на сайте больше нельзя.
В настройках логин-сервера на ghtweb стоит тип шифрования sha1, в конфиге логин сервера, так же стоит sha1. Менял настройки на whirpool и в ght и в логин сервере. Поведение не поменялось, только в указанных выше полях поначалу меняется вид строки хэша, но поле password в БД логин сервера всегда имеет вид sha1:1000:BKUtFOSowxjReuJ2InqAesCMSOOmUo3q:RckmG3A/AGEG3TODiYTgsCWjz6+/UqyW после первой авторизации в нём(ЛС).
Кто сталкивался с подобным, прошу подсказать, как исправить или куда копать?
Прикрепляю фрагменты Lineage.php и LoginForm.php с каталога ghtweb'a, так как там в коде встречается passwordEncrypt

PHP:
#
/**
     * Шифровка пароля
     *
     * @param $password
     *
     * @return string
     */
    public function passwordEncrypt($password)
    {
        if ($this->config('password_type') == Ls::PASSWORD_TYPE_WHIRLPOOL) {
            return base64_encode(hash('whirlpool', $password, true));
        }

        return base64_encode(pack('H*', sha1(utf8_encode($password))));
    }


 

PHP:
 // Аккаунт на сервере найден
                if ($account) {
                    if ($account['password'] == $l2->passwordEncrypt($this->getPassword())) {
                        // Аккаунта на сайте нет, создаю его так как на сервере он уже есть
                        if (!$siteAccount) {
                            $email = null;

                            $columnNames = $l2->getDb()
                                ->getSchema()
                                ->getTable('accounts')
                                ->getColumnNames();

                            if (is_array($columnNames)) {
                                foreach ($columnNames as $column) {
                                    if (strpos($column, 'mail') !== false && isset($account[$column])) {
                                        $email = $account[$column];
                                    }
                                }
                            }

                            // В таблице с аккаунтами нет поля с Email. Нет смысла регать дальше аккаунт на сайте
                            if (!$email) {
                                throw new Exception('Аккаунт не найден');
                            }

                            // Создаю аккаунт на сайте
                            $userModel = Users::create($login, $email, Users::STATUS_ACTIVATED, $lsId, Users::ROLE_DEFAULT);
                            $userModel->save(false);

                            $siteAccountUserId = $userModel->user_id;
                        }

                        $found = true;
                    }
                }

                // Аккаунт не найден
                if (!$found) {
                    if ($siteAccountUserId) {
                        UsersAuthLogs::model()->addErrorAuth($siteAccountUserId);
                    }

                    $this->incrementBadAttempt();
                    $this->addError($attr, 'Неправильный Логин или Пароль.');
                }
            } catch (Exception $e) {
                $this->addError('login', $e->getMessage());
            }
        }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно вскрывать JTS, смотреть логику авторизации и переписывать её в Ghtweb :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем в JTS алгоритм шифрования - PBKDF2WithHmacSHA1, а в Ghtweb просто sha1. Поэтому после входа через LS пароль меняется с зашифрованным алгоритмом PBKDF2WithHmacSHA1 и нельзя войти через Ghtweb. Решение: переписать алгоритм регистрации, авторизации и восстановления пароля в Ghtweb или можно переписать  авторизацию в JTS, если есть исходники

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за подсказку, ElectroMyStyle.

В 18.04.2022 в 12:16, ElectroMyStyle сказал:

В общем в JTS алгоритм шифрования - PBKDF2WithHmacSHA1, а в Ghtweb просто sha1.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...