Веб обвязки для последних версий ядра TrinityCore и прочих

Meramaf

New member
Новичок
Регистрация
01.11.2020
Сообщения
11
Реакции
3
Баллы
0
Возраст
34
Местоположение
Germany
Всем привет.

Столкнулся с такой проблемой. Все веб обвязки и WoW CMS довольно устарели и долгое время не обновляются. Имеется куча старых полноценных сайтов, но не получается их настроить под последние сборки ядер Trinity, так как в старых ядрах использовалась таблица sha_pass а в новых она была заменена на
таблицы salt и verifier облазил интернет и нашел фикс этого обновления для страниц регистрации и логина.

PHP:
<?php

function Register()
{
    if(isset($_POST['register']))
    {
        if(!empty($_POST['username']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['re-password']))
        {
            function ValidateEmail($email)
            {
                if(filter_var($email, FILTER_VALIDATE_EMAIL))
                {
                    if(strlen($email) <= 255)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

                return false;
            }

            function ValidateUsername($username)
            {
                if(strlen($username) <= 32)
                {
                    if(ctype_alnum($username))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

                return false;
            }

            function Captcha($secret, $captcha, $lastip)
            {
                $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $captcha . "&remoteip=" . $lastip);
                $decode   = json_decode($response, true);

                if(intval($decode['success']) == 1)
                {
                    return true;
                }

                return false;
            }

            global $con;

            $username   = $_POST['username'];
            $email      = $_POST['email'];
            $password   = $_POST['password'];
            $repassword = $_POST['re-password'];
            $captcha    = $_POST['g-recaptcha-response'];
            $ip_address = $_SERVER['REMOTE_ADDR'];
            $secret     = CAPTCHA_SECRET;
            $expansion  = EXPANSION;

            if(ValidateUsername($username) && ValidateEmail($email))
            {
                $data = $con->prepare('SELECT COUNT(*) FROM account WHERE username = :username OR email = :email');
                $data->execute(array(
                    ':username' => $username,
                    ':email'    => $email
                ));

                if($data->fetchColumn() == 0)
                {
                    if(Captcha($secret, $captcha, $ip_address))
                    {
            //--------------IMPLAMENTED CHANGE-------------------------      
                        // Create new arry to hold salt and verifier and call getRegistrationData passing in $username and $password
            list($salt, $verifier) = getRegistrationData(strtoupper($username), $password);
                        $data = $con->prepare('INSERT INTO account (username, salt, verifier, email, last_ip, expansion)
                        VALUES(:username, :salt, :verifier, :email, :ip, :expansion)');
                        $data->execute(array(
                            ':username'  => $username,
                            ':salt'      => $salt,
              ':verifier'  => $verifier,
                            ':email'     => $email,
                            ':ip'        => $ip_address,
                            ':expansion' => $expansion
                        ));
            //----------------END CHANGE----------------------------

                        echo '<div class="callout success">' . SUCCESS_MESSAGE . '</div>';
                        echo '<div class="callout warning">' . REALMLIST . '</div>';
                    }
                    else
                    {
                        echo '<div class="callout alert">Capctha was invalid!</div>';
                    }
                }
                else
                {
                    echo '<div class="callout alert">Username or Email is already in use!</div>';
                }
            }
            else
            {
                echo '<div class="callout alert">Username or Email is not valid!</div>';
            }
        }
        else
        {
            echo '<div class="callout alert">All fields are required!</div>';
        }
    }
}
//--------------IMPLAMENTED CHANGE-------------------------
// pulled from https://github.com/TrinityCore/account-creator/commit/f2ef6e59c4104ac1685fa817b56870b6df20b4ea
function calculateSRP6Verifier($username, $password, $salt)
{
    // algorithm constants
    $g = gmp_init(7);
    $N = gmp_init('894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7', 16);

    // calculate first hash
    $h1 = sha1(strtoupper($username . ':' . $password), TRUE);

    // calculate second hash
    $h2 = sha1($salt . $h1, TRUE);

    // convert to integer (little-endian)
    $h2 = gmp_import($h2, 1, GMP_LSW_FIRST);

    // g^h2 mod N
    $verifier = gmp_powm($g, $h2, $N);

    // convert back to a byte array (little-endian)
    $verifier = gmp_export($verifier, 1, GMP_LSW_FIRST);

    // pad to 32 bytes, remember that zeros go on the end in little-endian!
    $verifier = str_pad($verifier, 32, chr(0), STR_PAD_RIGHT);

    // done!
    return $verifier;
}

// Returns SRP6 parameters to register this username/password combination with
function getRegistrationData($username, $password)
{
    // generate a random salt
    $salt = random_bytes(32);

    // calculate verifier using this salt
    $verifier = calculateSRP6Verifier($username, $password, $salt);

    // done - this is what you put in the account table!
    return array($salt, $verifier);
}
//----------------END CHANGE----------------------------
?>

Но как я эти строки не вставлял в код страниц, пароль не создавался как положенно. Помогите обновить сайты и я поделюсь на форуме тем что у меня есть если обновлю до актуальных версий!
 

Shiro

New member
Новичок
Регистрация
06.12.2019
Сообщения
22
Реакции
30
Баллы
0
Возраст
27
Местоположение
Tokyo
1 часть
2 часть
3 часть

оригинальный репозиторий просто показал выше историю портирования


переписать можно любой сайт и скрипт


Ну у меня всё идеально стоит, но увы в базе аккаунт не создаётся и всё, хотя на странице регистрации пишет что аккаунт создан)
 

WinWoolF

New member
Команда форума
Администратор
Регистрация
13.10.2013
Сообщения
5 354
Реакции
451
Баллы
0
В Легионе и БФА регистрация происходит несколько иначе, не как было раньше. Meramaf, правильно написал
в старых ядрах использовалась таблица sha_pass а в новых она была заменена на
таблицы salt и verifier
Я сильно во все это не вникал, а вот Robisho работал с этим на прямую. Я думаю он сможет тебе все рассказать более подробнее, но немного позже, сейчас у него хватает забот выше крыши.
 

Nyll

New member
Продвинутый пользователь
Регистрация
19.06.2020
Сообщения
55
Реакции
76
Баллы
0
Возраст
32
Местоположение
USA
Просто включи поддержку SRP6, если юзаешь код от MasterKing32, он уже добавил в конфиг. Тогда всё заработает с регистрацией.
Так же необходимо включить у PHP расширение -> GMP
Ну а так, выше верно про таблицы написали
salt and verifier are now BINARY(32), from VARCHAR(64)
SessionKey is now BINARY(40), from VARCHAR(80)
 

Meramaf

New member
Новичок
Регистрация
01.11.2020
Сообщения
11
Реакции
3
Баллы
0
Возраст
34
Местоположение
Germany
Просто включи поддержку SRP6, если юзаешь код от MasterKing32, он уже добавил в конфиг. Тогда всё заработает с регистрацией.
Так же необходимо включить у PHP расширение -> GMP
Ну а так, выше верно про таблицы написали
salt and verifier are now BINARY(32), from VARCHAR(64)
SessionKey is now BINARY(40), from VARCHAR(80)
Это ответ для Shiro, а меня более интересует, как подогнать старые сайты под SRP6
Хотел обновить, например, вот этот сайт и не получилось...:(
6FxnhDE.jpg
 

Robisho

New member
Пользователь
Регистрация
25.07.2019
Сообщения
65
Реакции
38
Баллы
0
Возраст
40
Местоположение
Moscow
С регой бфа и легиона все на уровне детского сада из двух таблиц и верной соли. Не изобретайте велосипед. В репозитории Тринити и мангоса в гите лежит кусок кода регистрации из трёх строк.
 

sansanich73

New member
Посетитель
Регистрация
30.05.2019
Сообщения
1
Реакции
0
Баллы
0
Возраст
50
Местоположение
nvartovsk
$auth_db->real_query("INSERT INTO `account` (`username`, `sha_pass_bash`, `email`) VALUES ('".$login."', SHA1(CONCAT(UPPER('".$login."'),':',UPPER('".$pass."'))), '".$email."')");

$result = $auth_db->query("SELECT * FROM `account` WHERE `username`='".$login."' AND `sha_pass_bash`=SHA1(CONCAT(UPPER('".$login."'),':',UPPER('".$pass."')))");

подскажите как исправить сее чудо. Заранее блогодарен
Сообщения автоматически объединены:

$auth_db->real_query("INSERT INTO `account` (`username`, `sha_pass_bash`, `email`) VALUES ('".$login."', SHA1(CONCAT(UPPER('".$login."'),':',UPPER('".$pass."'))), '".$email."')");

$result = $auth_db->query("SELECT * FROM `account` WHERE `username`='".$login."' AND `sha_pass_bash`=SHA1(CONCAT(UPPER('".$login."'),':',UPPER('".$pass."')))");

подскажите как исправить сее чудо. Заранее блогодарен

Я уверен что для знающих людей это займет не много времени!!! Обратите свой взор на это сообщение.
 
Последнее редактирование:
Верх Низ