This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Система получения пасивного дохода [RedAge]

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Обязательно передам разработчикам RedAge, пример брался из других SQL запросов.

Моя основа JS. C# сложный.
Если есть возможность подредактируй код для других пользователей RedAge мода.
 
Последнее редактирование:

Deegle

Участник портала
26 Апр 2021
19
9
23
Да? Прикольно, он сам о себе что ли пишет или я читал не внимательно. Не проснулся видимо
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,305
1,552
211
27
Не понял, зачем было язвить с "передам разработчикам RedAge", те разработчики, которые писали мод, который был слит - давно на RA не работают. Один на Alt:V уже как 2 года запуститься не может, а второй сейчас на Onyx RP работает. То, что в 2019 об этом они не знали - это их косяк, а не текущих разработчиков RA. На данный момент в моде RA уже давным-давно во всех запросах есть защита от SQL инъекции.

C#:
    private void BizPayments(string play)
    {
        try
        {
            {
                double money = 0;
                MySqlCommand cmd = new MySqlCommand();
                cmd.CommandText = "SELECT * FROM `businesses` WHERE `owner`=@var0";
                cmd.Parameters.AddWithValue("@val0", play);
                DataTable res2 = MySQL.QueryRead(cmd);
                if (res2 == null || res2.Rows.Count == 0)
                {
                    Log.Write("Резов нет пиздец!2", nLog.Type.Warn);
                    return;
                }
                foreach (DataRow Row in res2.Rows)
                {
                    int cash = Convert.ToInt32(Row["sellprice"]);
                    money = cash / 100 * 2;// тут мы ставим процент
                    Log.Write("Кеш " + money, nLog.Type.Success);
                    BizPayments2(play, money);
                }
            }
        }
        catch (Exception e) { Log.Write("EXCEPTION AT \"CMD\":\n" + e.ToString(), nLog.Type.Error); }
    }

    public void BizPayments2(string play, int money)
    {
        try
        {
            Log.Write(play + " " + money);
            if (!play.Contains('_')) return;
            string[] split = play.Split('_');
            List<Player> players = NAPI.Pools.GetAllPlayers();
            MySqlCommand cmd;
            if (players.Count != 0)
            {
                foreach (Player p in players)
                {
                    if (p != null && p.Name == play)
                    {
                        int iz = Convert.ToInt32(Main.Players[p].Money);
                        if (money + iz >= 200000000) return;
                        Log.Write("Игрок онлайн плеерКеш " + money, nLog.Type.Success);
                        MoneySystem.Wallet.Change(p, money);
                        return;
                    }
                }
                Log.Write("Так-же " + split[0] + " " + split[1] + " " + money, nLog.Type.Success);
                cmd = new MySqlCommand;
                cmd.CommandText = "UPDATE characters SET money=money+@val0 WHERE firstname=@val1 AND lastname=@val2";
                cmd.Parameters.AddWithValue("@val0", money);
                cmd.Parameters.AddWithValue("@val1", split[0]);
                cmd.Parameters.AddWithValue("@val2", split[1]);
                MySQL.Query(cmd);
                return;
            }
            else
            {
                Log.Write("Так-же " + split[0] + " " + split[1] + " " + money, nLog.Type.Success);
                cmd = new MySqlCommand;
                cmd.CommandText = "UPDATE characters SET money=money+@val0 WHERE firstname=@val1 AND lastname=@val2";
                cmd.Parameters.AddWithValue("@val0", money);
                cmd.Parameters.AddWithValue("@val1", split[0]);
                cmd.Parameters.AddWithValue("@val2", split[1]);
                MySQL.Query(cmd);
                return;
            }
        }
        catch (Exception e) { Log.Write("EXCEPTION AT \"CMD\":\n" + e.ToString(), nLog.Type.Error); }
    }

Вот твой же код, но уже с защитой от инъекции и потенциальном exception'е в BizPayments2. Так же у тебя была проблема в BizPayments2, которая создавала бы один и тот же запрос в БД из-за того, что foreach перебирал бы большое количество игроков и при каждом несхожем создавал новый запрос на те же данные, которые уже обновлялись в прошлой итерации. (UPD: заметил return в else и всё же это получается, что не перебирались бы все игроки онлайна, а ты бы проверил только первого игрока в списке пула, в любом случае тоже глупое решение, если уж ты достал пул и сделал перебор.)
Код всё еще сомнительный, но хотя бы без трёх проблем.
 
Последнее редактирование:

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Весь слитый мод RedAge состоит из таких запросов, за исключением некоторых моментов сохранения большой информации в базу.
Поэтому поправка от "high codera" тут не является уместной.

Вбив "cmd.Parameters.AddWithValue" в поиск по моду я увидел что это параметр используется только в больших SQL запросах, кроме двух мест, там 3 передаваемых значения.
Использование этой фнукции можно найти только в 8 файлах (И то там только Update и Insert)
В то время как MySQL.QueryRead($) && MySQL.Query($) занимает 119 строк кода.

Я это подвел к тому, что люди использовали слитый мод с такими запросами более года, и мод не испытывал ошибок или проблем в SQL запросах.

Теперь представим сколько строк кода займет
Вставить cmd.Parameters.AddWithValue в каждый запрос.
Передавать параметры в запрос через $" " не безопасно, даже если это ник

Типо я просто реально не могу представить как это работает в твоей голове?
Ты отправляешь ник (Thomas Shelby) а тебе приходит (Thimur Ebiy)?::??:?:??

Не знаю к чему были твои "То чувство, когда про mysql инъекции не слышали".
Еще и с ролью хай кодер сидишь, "говоришь о таких великих ошибках человечества".
 
Последнее редактирование:

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,305
1,552
211
27
kekW, то чувство, когда протягиваешь руку, а её кусают по локоть.
Мод RA был слит в 2019 году и тогда её бывшие разработчики не сильно интересовались безопасностью, потому слитый мод (который слил тот, кто его и разрабатывал) и имеет эти проблемы. Текущий мод RA их не имеет, это так сложно понять? Какая разница, сколько строк займёт заменить это везде, если это поможет в безопасности? Исправлять нужно везде и в обязательном порядке. Почитай о SQL инъекциях на досуге, если не понимаешь, как они работают. Всяких весёлых ребят видел, но такое - впервые, спасибо, повеселил. Успехов!
 

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Давай прочитаем еще раз...


Вбив "cmd.Parameters.AddWithValue" в поиск по моду я увидел что это параметр используется только в больших SQL запросах, кроме двух мест, там 3 передаваемых значения.
Использование этой фнукции можно найти только в 8 файлах (И то там только Update и Insert)

В то время как MySQL.QueryRead($) || MySQL.Query($) занимает 119 строк кода.
Я это подвел к тому, что люди использовали слитый мод с такими запросами более года, и мод не испытывал ошибок или проблем в SQL запросах.


Ты сказал про запрос с долларом в начале.

Цитирую - "Передавать параметры в запрос через $" " не безопасно, даже если это ник"
Но напишу еще раз, что-бы тебе это вошло в голову.

В то время как MySQL.QueryRead($) || MySQL.Query($) занимает 119 строк кода.
Я это подвел к тому, что люди использовали слитый мод с такими запросами более года, и мод не испытывал ошибок или проблем в SQL запросах.
 

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,305
1,552
211
27
Камень, натуральный камень. То, что на серверах играет 0 человек (или 2 твоих ближайших друга) и никто не пытается вникнуть в вопрос SQL Инъекций - это не значит, что проблемы нет. Успехов, повторюсь. Лучший разработчик месяца в твоём лице.
 
Реакции: DaVilka

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Ну блин... Окей, я супер натуральный камень.
В таком случае объясни, чем это опасно?
 

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Так в каком случае это опасно? Как происходит инъекция?

Просто этот вопрос я задаю для того что-бы не допустить эти ошибки в будущем.
Просто я слышу от вас что это защищает но вы не объясняете как и от чего.
Именно из-за этого начался этот спор.

Каких либо описаний ситуации я в интернете не нашел.
 

Harland David Sanders

Куратор портала
Команда форума
Куратор портала
VIP
high coder
media
10 Сен 2020
3,421
2,785
219
Так в каком случае это опасно? Как происходит инъекция?
Имея на руках слитые исходники самого RA и систем от него можно проанализировать код и найты "слабые места" с их помощью получится воспроизвести инъекцию.
Да, большинство данных с клиента проходят parseInt и прочие проверки, но как показывает практика - не всегда
 

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Хорошо, тут мы видим ситуацию прихода информации с клиента. Но я же делаю Select в уже существующей таблице, и отправляю информацию в следующие евенты.
Мой код же никак не связан с клиентской частью.
 

Aiden

Гуру
high coder
7 Сен 2021
279
174
122
Не думаю, что вас забанили в гугле или яндексе. Там вы можете найти все по этой теме
Если конкретнее про рейдж, то поищите статью, когда с помощью данной SQL инъекции взломали аккаунт сармата на 5* (файвстар (помянем)). Что РА, что на тот момент 5* - мод был один.
 

akudinov28

Гуру
24 Фев 2021
330
188
106
Я не шарю особо в редаговском моде, поэтому объясню в общем виде. Если у тебя происходят прямые запросы к БД (что-то типа SELECT * FROM users WHERE id = $id), при этом переменная &id заполняется из данных, введенных пользователем в текстовое поле, и эти данные не подготавливаются, то ничто мне не мешает написать в текстовом поле «-1 UNION SELECT login, password FROM users WHERE id = 1”. В результате выполнится запрос, и я получу данные пользователя с id 1. Количество колонок в таблице, и остальные данные также подбираются через инъекции. Это очень простейший пример с просторов интернета, но ты должен представить себе, какие могут быть последствия. Ведь я могу через sql записать файл на сервер со своим скриптом, например.
 

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Крч мы пришли к тому, что мой код не должен быть экранирован, и это вполне безопасный EVENT.
Так-как с килента мы ничего не получаем, в принципе эта защита нам не нужна.
Думаю что на этом моменте спор закрыт, и мой код является нормальным в данном случае.
 
Реакции: XDeveluxe

XDeveluxe

Модератор
Команда форума
high coder
30 Авг 2021
2,305
1,552
211
27
Особенно когда ты сливаешь в паблик код, который предлагаешь использовать и другим людям - это очень безопасно и явно не нуждается в защите, ведь в 2019 в моде РА её не было, уффффффь. Даже БЕЗ опубликования кода это делать небезопасно просто потому, что если человек захочет найти на твоём моде иньекции, вне зависимости от того, что это за мод - он будет пытаться это делать и рано или поздно наткнется на такой участок, потому что крутой разработчик подумал, что ему это просто не нужно. Дело твоё, используй, но людям не толкай это с умным видом.
 

VPNumLock

Активный участник
17 Янв 2021
134
35
40
Клиент с помощью софта может вызвать "RemoteEvent", а в данном случае его нет, в чем проблема?

Ты реально зачем-то всеми силами пытаешься меня задушить. Только зачем?
 

akudinov28

Гуру
24 Фев 2021
330
188
106
Причём тут задушить вообще? Люди обратили внимание на потенциальную уязвимость. Даже харланд, который очень много работал с данным модом, подтвердил, что уязвимости такого плана имеются, и лучше так не делать. Ты же пытаешься сейчас убедить в первую очередь сам себя, что всё окей. Не вопрос, делай как считаешь нужным, но не задавай тогда глупых вопросов, и не пытайся никого убедить в своей правоте. Так и скажи, мол, я считаю, что sql инъекция в rage mp невозможна, и не собираюсь подготавливать данные для запросов. А то, по твоим словам получается, что мы тут все дурачки собрались.