Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал [урок] система авторизации клиента

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем byxar, 6 ноя 2011.

  1. 4erchill

    4erchill Активный участник

    Баллы:
    61
    Простите что пишу сюда.

    вопрос такого плана. сия система авторизации не совершенна (если поможете то отпишу как обойти).
    и единственная мысля которая мне пришла в голову это сделать привязку клиента к ланчеру.
    сам я в яве полный ноль, но объяснить что нужно более менее понятно могу.

    суть:
    необходимо сделать переменную "VERSION" из ланчера наследуемой самим клиентом, и в самом клиенте (в файле GuiMainMenu.java, по типу проверки на мд5) сделать проверку этой переменной на равенство (ну пусть значение берется с сервера) с переменной которая лежить по указанному хосту. Если равенство верно, то меню "сетевая игра" не блокируется, иначе блок.

    заранее спасибо за помощь.
     
  2. Хостинг MineCraft
    <
  3. 4erchill

    4erchill Активный участник

    Баллы:
    61
    если кто напишет этот кусок кода в три строчки на яве, в долгу не остануь ;)
     
  4. TechnicianBear

    TechnicianBear Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    BearTech
    Уже 2-3 часа "бьюсь с ошибкой", но всё безуспешно.
    Суть проблемы. Решил создать регистрацию на сайте. Зарегал MySQL. Добавил через phpAdmin в зареганый MySQL файлы accounts.sql и data.sql . Отредактировал файл connect.php а точнее конфигурации подключения к базе данных. закинул вместе с остальными файлами в папку на сайте. переименновал регистрацию которая тут (в этой теме) присутствует в index.php (а так же до того как закинуть сменил ему кодировку потому, что ничего понять было нельзя (была кодировка UTF-8 (Без BOM)). Прошёл к папке через браузер. Открылось окно (ну введите логин, пароль) я заполнил все строки. Нажал отправить и мне выскачила вот такая ошибка:
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/u419882550/public_html/registr/auth/index.php on line 39
    Запрос к базе завершился ощибкой.
    Помогите пожалуйста! Я в этом деле нубяка и незнаю что к чему :(
     
  5. Nik0lashka

    Nik0lashka Активный участник

    Баллы:
    63
    Друзья, скажите пожалуйста в каких файлах надо менять адреса в лаунчере, в 1.2.5 нет половины тех .java, что в первом посте.
     
  6. nf1975

    nf1975 Старожил Пользователь

    Баллы:
    103
    Есть лаунчер, сделанный по этой инструкции + проверка md5 minecraft.jar, если снифером перехватить пути к нужным файлам и заменить в любом лаунчере без проверки md5 и с редактированном minecraft.jar, то на сервер будет возможность зайти с него? Если к примеру на сервере нету плагина авторизации, а только через лаунчер, то можно будет спокойно зайти с напиханным читами клиентом и под любым ником?
    Лучший вариант будет установка плагина авторизации + шифрование сессии?
     
  7. TechnicianBear

    TechnicianBear Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    BearTech
    можно обойти проверку лаунчером клиент тупо сделав на сайте проверку YES (я точно не помню как было у моего друга) и ты получишь что свободно сможешь войти с любыми модификациями.
    насчёт ника. это не возможно так как сервер посылает запрос на файл который отправляет обратный запрос серверу тем самым не давая вам войти под чужим ником (тупо будет писать - Bad login) и ещё если админ будет читать лог (я не знаю точно пишет ли сервер об ошибках при подключении) то может вас забанить по IP (хотя для большинства это не страшно :trf:)
     
  8. qLimeeZ

    qLimeeZ Активный участник

    Баллы:
    63
    у меня появился такой вопрос: как сделать так что бы, когда обновляешь игру через лаунчер, сервер автоматически находился в сетевой игре и его не нужно было добавлять ?
     
  9. xvlad

    xvlad Старожил Пользователь

    Баллы:
    103
    Skype:
    xvladxtreme
    +1
     
  10. TechnicianBear

    TechnicianBear Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    BearTech
    server.dat копируй со своим IP и закинь в client.zip
     
    Skayt55, xvlad и qLimeeZ нравится это.
  11. qLimeeZ

    qLimeeZ Активный участник

    Баллы:
    63
    Благодарю
     
  12. xvlad

    xvlad Старожил Пользователь

    Баллы:
    103
    Skype:
    xvladxtreme
    Как зделать нормальную русификацию в клиенте ?
     
  13. Фёдор

    Фёдор Активный участник

    Баллы:
    78
    Имя в Minecraft:
    Filonich
    собственно меня интересует работает ли скрипт с джумлой 2.5, просто в самом скрипте написано 1.6-1.7
     
    Сникерсни нравится это.
  14. tuz

    tuz Активный участник Пользователь

    Баллы:
    78
    Добавь свой сервер и напиши его название в список серверов. Зайди в папку с игрой там есть servers.dat его пихай в client.zip
     
    xvlad нравится это.
  15. xvlad

    xvlad Старожил Пользователь

    Баллы:
    103
    Skype:
    xvladxtreme
    Ответ был дан раньше
     
  16. tuz

    tuz Активный участник Пользователь

    Баллы:
    78
    видимо не заметил
     
    qLimeeZ нравится это.
  17. TechnicianBear

    TechnicianBear Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    BearTech
    забыл лайк ты поставить ;) (это намёк :) )
     
    qLimeeZ нравится это.
  18. Alex_P9712

    Alex_P9712 Активный участник Пользователь

    Баллы:
    63
    вот вопросик я сделал лаунчер и все скрипты правильно но когда я захожу на свой\друга серв - ошибка конец строки (помоему endOFstream)
     
  19. Combain

    Combain Активный участник

    Баллы:
    63
    У меня ошибка была с MySQL, лагала. Но через сутки все стало в норме.
     
  20. Combain

    Combain Активный участник

    Баллы:
    63
    Правда бывает падает news.php.
     
  21. nf1975

    nf1975 Старожил Пользователь

    Баллы:
    103
    Появилась не большая проблема.
    У меня IPB движок и вместо логина(т.к. будут проблемы с русс буквами и символами) у меня дополнительное поле в той же базе, но таблица pfields_content, получается нужно преобразовать сложные запросы, ник находится в ячейке field_4, вот, что получилось:

    joinserver.php
    Код:
    <?php
    define('INCLUDE_CHECK',true);
    include ("connect.php");
     
    $sessionid = mysql_real_escape_string($_GET['sessionId']);
    $user = mysql_real_escape_string($_GET['user']);
    $serverid = mysql_real_escape_string($_GET['serverId']);
     
    $result = mysql_query("Select pfields_content.field_4, members.session, members.server FROM pfields_content, members Where members.session='$sessionid' And pfields_content.field_4='$user' And members.server='$serverid'") or die ("Запрос к базе завершился ошибкой.");
     
    if(mysql_num_rows($result) == 1){
        echo "OK";
    } else {
     
    $result = mysql_query("Update members, pfields_content FROM pfields_content, members SET members.server='$serverid' Where members.session='$sessionid' And pfields_content.field_4='$user'") or die ("Запрос к базе завершился ощибкой.");
     
        if(mysql_affected_rows() == 1){
            echo "OK";
        } else {
            echo "Bad login";
        }
    }
    ?>
    auth.php
    Код:
    <?php
    define('INCLUDE_CHECK',true);
    require_once 'functions.php';
    include ("connect.php");
    $login=$_POST['user'];
    $password=$_POST['password'];
    $ver=$_POST['version'];
     
            if(getGameInfo('launcher') == $ver){
     
                $result = mysql_query("SELECT members.members_pass_hash, pfields_content.field_4 FROM pfields_content, members WHERE pfields_content.field_4='$login'") or die ("Запрос к базе завершился ошибкой."); //извлекаем из базы все данные о пользователе с введенным логином
                    $myrow = mysql_fetch_array($result);
     
                $realPass = $myrow[$db_columnPass];
     
                    if (checkPass($realPass,$password,$login))
                    {
                        $sessid = generateSessionId();
                        $gamebuild=getGameInfo('build');
     
                        mysql_query("UPDATE members, pfields_content FROM pfields_content, members SET members.session='$sessid' WHERE pfields_content.field_4 = '$login'") or die ("Запрос к базе завершился ошибкой.");
     
                        $dlticket = md5($login);
                        echo $gamebuild.':'.$dlticket.':'.$login.':'.$sessid.':';
                    }
                else {
                    echo "Bad login";
                    }
            }
            else{
                echo 'Old version';
                }
    ?>
    checkserver.php
    Код:
    <?php
    define('INCLUDE_CHECK',true);
    include ("connect.php");
     
    $user = mysql_real_escape_string($_GET['user']);
    $serverid = mysql_real_escape_string($_GET['serverId']);
     
    $result = mysql_query("Select pfields_content.field_4, members.server FROM pfields_content, members Where pfields_content.field_4='$user' And members.server='$serverid'") or die ("Запрос к базе завершился ошибкой.");
     
    if(mysql_num_rows($result) == 1){
        echo "YES";
    } else{
        echo "NO";
    }
     
    ?>
    functions.php
    Код:
     <?php
    if(!defined('INCLUDE_CHECK')) die('У вас нет прав на выполнение данного файла!');
     
    function generateSessionId(){
        // generate rand num
        srand(time());
        $randNum = rand(1000000000, 2147483647).rand(1000000000, 2147483647).rand(0,9);
        return $randNum;
    }
     
    function getGameInfo($type){
        include ("connect.php");
        switch($type){
        case 'build':
            $query = mysql_query("SELECT * FROM $db_GameDatatable WHERE $db_Propertycolumn = 'latest-game-build'") or die ("Запрос к базе завершился ошибкой.");   
                $resource = mysql_fetch_array($query);
                return $resource[$db_Valuecolumn];
        break;
     
        case 'launcher':
            $query = mysql_query("SELECT * FROM $db_GameDatatable WHERE $db_Propertycolumn = 'launcher-version'") or die ("Запрос к базе завершился ошибкой.");
                $resource = mysql_fetch_array($query);
                return $resource[$db_Valuecolumn];
        break;
     
        }
    }
     
    function checkPass($realPass,$password,$login){
                if (strlen($realPass) == 32)
                {
                    $cp = md5($password);
                    if ($realPass==$cp) {
                        return true;
                    }
                    else {
                        include ("connect.php");
                        $query = mysql_query("SELECT * FROM pfields_content WHERE field_4 = '$login'") or die ("Запрос к базе завершился ошибкой.");
                            $resource = mysql_fetch_array($query);
                        $salt = $resource[$db_columnPassSalt];
                        $cp = md5(md5($salt).md5($password));
                    }
                }
                else {
                    if(strpos($realPass,'$SHA$') !== false)
                    {
                        $ar = preg_split("/\\$/",$realPass);
                        $salt = $ar[2];
                        $cp = '$SHA$'.$salt.'$'.hash('sha256',hash('sha256',$password).$salt);
                    }
                    else
                    {
                        $saltPos = (strlen($password) >= strlen($realPass) ? strlen($realPass) : strlen($password));
                        $salt = substr($realPass, $saltPos, 12);
                        $hash = hash('whirlpool', $salt . $password);
                        $cp = substr($hash, 0, $saltPos) . $salt . substr($hash, $saltPos);
                    }
                }
               
                if ($realPass==$cp) {
                    return true;
                }
                else {
                    return false;
                }
    }
    ?>
    Но после этого просит обновление, качает minecraft.jar и обрывается 91-92%, до редактирования все нормально, подскажите, где и какую я упустил деталь.
     

Поделиться этой страницей