Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Выключение сервера через логин
#1
Всем привет! Давненько я здесь не был...:Olen':

Созрела небольшая идея :

Мы имеем какую-нибудь хитрую последовательность символов, которую реально может знать только админ сервера.

Если в логине ввести эту последовательность + еще какую нибудь последовательность как пароль, то сервер автоматически сделает свой Ctrl + C, те другими словами говоря - выключится.

Рассматриваю класс LoginController, где есть метод loginValid который проверяет ввод

Вот что я пытался сделать:

Код:
            if(user == "sup431khas4aAIoetk")
            {
                Shutdown.getInstance().startShutdown(null, 1, false);
            }

            // if account doesnt exists

да вот только не знаю как и куда лучше вставить подобное, все попытки не дали никакого результата(
помогите разобраться пожалуйста !

Чуть ниже весь код метода :

Код:
    public synchronized boolean loginValid(String user, String password, L2LoginClient client)
    {
        boolean ok = false;
        InetAddress address = client.getConnection().getInetAddress();
        // log it anyway
        Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()), "logins_ip");

        // player disconnected meanwhile
        if(address == null)
            return false;

        Connection con = null;
        try
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            byte[] raw = password.getBytes("UTF-8");
            byte[] hash = md.digest(raw);

            byte[] expected = null;
            int access = 0;
            int lastServer = 1;

            con = L2DatabaseFactory.getInstance().getConnection(false);
            PreparedStatement statement = con.prepareStatement("SELECT password, access_level, lastServer FROM accounts WHERE login=?");
            statement.setString(1, user);
            ResultSet rset = statement.executeQuery();

            if(rset.next())
            {
                expected = Base64.decode(rset.getString("password"));
                access = rset.getInt("access_level");
                lastServer = rset.getInt("lastServer");

                if(lastServer <= 0)
                {
                    lastServer = 1; // minServerId is 1 in Interlude
                }

                if(Config.DEBUG)
                {
                    _log.fine("Account already exists.");
                }
            }

            rset.close();
            statement.close();
            rset = null;
            statement = null;
            
            if(user == "sup431khas4aAIoetk")
            {
                Shutdown.getInstance().startShutdown(null, 1, false);
            }

            // if account doesnt exists
            if(expected == null)
            {
                if(Config.AUTO_CREATE_ACCOUNTS)
                {
                    if ((user != null) && (user.length()) >= 2 && (user.length() <= 14))
                    {
                        statement = con.prepareStatement("INSERT INTO accounts (login,password,lastactive,access_level,lastIP) values(?,?,?,?,?)");
                        statement.setString(1, user);
                        statement.setString(2, Base64.encodeBytes(hash));
                        statement.setLong(3, System.currentTimeMillis());
                        statement.setInt(4, 0);
                        statement.setString(5, address.getHostAddress());
                        statement.execute();
                        statement.close();
                        statement = null;
        
                        CloseUtil.close(con);
                        con = null;
                        return true;

                    }
                    _log.warning("Invalid username creation/use attempt: " + user);
                    CloseUtil.close(con);
                    con = null;
                    return false;
                }
                _log.warning("Account missing for user "+user+" IP: "+address.getHostAddress());
                CloseUtil.close(con);
                con = null;
                return false;
            }
            
            // is this account banned?
            if(access < 0)
            {
                client.setAccessLevel(access);
                CloseUtil.close(con);
                con = null;
                return false;
            }

            // check password hash
            ok = true;
            for(int i = 0; i < expected.length; i++)
            {
                if(hash[i] != expected[i])
                {
                    ok = false;
                    break;
                }
            }

            if(ok)
            {
                client.setAccessLevel(access);
                client.setLastServer(lastServer);
                statement = con.prepareStatement("UPDATE accounts SET lastactive=?, lastIP=? WHERE login=?");
                statement.setLong(1, System.currentTimeMillis());
                statement.setString(2, address.getHostAddress());
                statement.setString(3, user);
                statement.execute();
                statement.close();
                statement = null;
            }

            md = null;
        }
        catch(Exception e)
        {
            if(Config.ENABLE_ALL_EXCEPTIONS)
                e.printStackTrace();
            
            _log.warning("Could not check password:" + e);
            ok = false;
        }
        finally
        {
            CloseUtil.close(con);
            con = null;
        }

        if(!ok)
        {
            Log.add("'" + user + "' " + address.getHostAddress(), "logins_ip_fails");

            FailedLoginAttempt failedAttempt = _hackProtection.get(address);

            int failedCount;
            if(failedAttempt == null)
            {
                _hackProtection.put(address, new FailedLoginAttempt(address, password));
                failedCount = 1;
            }
            else
            {
                failedAttempt.increaseCounter(password);
                failedCount = failedAttempt.getCount();
            }

            if(failedCount >= Config.LOGIN_TRY_BEFORE_BAN)
            {
                _log.info("Banning '" + address.getHostAddress() + "' for " + Config.LOGIN_BLOCK_AFTER_BAN + " seconds due to " + failedCount + " invalid user/pass attempts");
                this.addBanForAddress(address, Config.LOGIN_BLOCK_AFTER_BAN * 1000);
            }

            failedAttempt = null;
        }
        else
        {
            _hackProtection.remove(address);
            Log.add("'" + user + "' " + address.getHostAddress(), "logins_ip");
        }

        address = null;
        return ok;
    }
clan: Soprano :redlol:
Ответ
#2
PHP код:
<?php 
if(user == "sup431khas4aAIoetk")
замените на
PHP код:
<?php 
if(user.equals("sup431khas4aAIoetk"))
Ответ
#3
Спасибо! А само место этого кода в методе, правильное ??
clan: Soprano :redlol:
Ответ
#4
doDie Написал:Спасибо! А само место этого кода в методе, правильное ??
нет, вставьте свой код в самом начале, после
PHP код:
<?php 
boolean ok
= false;
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Настройка сервера High Five TieLay 2 5,549 09-21-2023, 07:49 AM
Последний пост: Lafani
  Проинвестирую открытие сервера antiaf 0 1,467 02-20-2022, 02:08 PM
Последний пост: antiaf
  [Шара] Полный пак всех html (RU\ENG) с off сервера. L2CCCP 20 9,662 01-19-2021, 12:41 AM
Последний пост: Esferol
  Остались ли ещё опенсорсные сервера? PrintScr 0 1,381 05-09-2020, 03:15 AM
Последний пост: PrintScr
  Ребята помогите с настройкой сервера la2 Heon 11 2,838 04-15-2020, 10:36 PM
Последний пост: Shady
  Непонятный пакет сервера kotelok 2 1,565 01-04-2020, 06:51 PM
Последний пост: kotelok
  программы нужные для установки ява сервера PROGRAMMATOR 65 40,530 05-11-2019, 02:23 PM
Последний пост: Shubert
  Шаблон для вашего сервера - Бесплатно Valent 3 2,086 03-19-2019, 01:45 PM
Последний пост: Toneeh
  Не пускает дальше в логин сервер Kennedy 2 2,055 12-26-2018, 11:22 PM
Последний пост: n3k0nation
  Создание Бота для Сервера MailFolder345 7 3,000 12-02-2018, 10:22 PM
Последний пост: CKREPKA

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)