• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Нюансы разработки

shh0xt

Участник портала
3 Дек 2023
2
0
16
Всем привет, ради интереса разрабатываю сервер.

Основная инфа:
  • Сервер на Ubuntu 22.04
  • Node 20 v
  • Docker
  • postgres
  • 8 CPU 4,7 Ggz | 32 RAM | 300 GB NVME SSD

Делал ли так кто-нибудь и есть ли какие-то особенности совместимости движка

1) Нормально ли работает Rage если для валидации запросов с клиента на бэк использовать JWT, который будет хранить права, ID и прочие пропсы?
2) Насколько сильно теряется производительность при выносе большого количества действий с клиентской части на серверную (не хочу отдавать клиенту что-то серьезное, все через бэк под валидацией)?
 

Fumarie

Активный участник
27 Июн 2024
81
29
40
23
1) Нормально ли работает Rage если для валидации запросов с клиента на бэк использовать JWT, который будет хранить права, ID и прочие пропсы?
В рейдже в отличие от веба ты всегда точно знаешь от какого игрока пришел запрос и дополнительно авторизовывать его не нужно, все пропсы ставятся сервером через setVariable или setOwnVariable, это будет то же самое, что и пропсы в JWT


2) Насколько сильно теряется производительность при выносе большого количества действий с клиентской части на серверную (не хочу отдавать клиенту что-то серьезное, все через бэк под валидацией)?
Смотря что ты хочешь вынести и какой в этом смысл. Учти, что у тебя в ноде 1 поток, одно ядро процессора, кластеризация как в вебе невозможна. Единственное что ты можешь сделать для распределения нагрузки - масштабировать микросервисы, на которых нет прямой синхранизации с рейджом.

Поэтому считать что-то на сервере за клиента? для чего, дорого, не нужно.

Я сам довольно новенький смешарик в рейдже, тоже пришел с веба. Если я ошибаюсь по поводу кластеризации, более опытные товарищи подскажут. Я и сам был бы рад послушать об этом, но создавать отдельную тему для этого не решался)
 
  • OK
Реакции: Inoi

Inoi

/dev/null
VIP
15 Окт 2020
3,383
2,128
208
35
Делал ли так кто-нибудь и есть ли какие-то особенности совместимости движка
Как именно?

Под убунтой ты можешь запустить вроде что угодно
В докер ты тоже можешь запихать почти всё что угодно
Постгре очевидно будет работать так, как ты напишешь

В чём вопрос то тут
В совместимости движка с 300 GB NVME SSD конечно уверенности нет

На остальное в целом выше всё верно.
Но про "перенести на сервер" я бы остановился просто на ответе "смотря что".
 
Последнее редактирование:
  • Like
Реакции: Fumarie и Amazingevich

shh0xt

Участник портала
3 Дек 2023
2
0
16
В рейдже в отличие от веба ты всегда точно знаешь от какого игрока пришел запрос и дополнительно авторизовывать его не нужно, все пропсы ставятся сервером через setVariable или setOwnVariable, это будет то же самое, что и пропсы в JWT
Вопрос не в авторизации пользователя, а в авторизации данных. Вопрос в том, что доступ до объекта player есть на клиенте.
Предполагаю, что поковырявшись можно найти способ подмены данных.
Например типа player, и прочих данных. JWT же благодаря подписи header и payload сертом, я могу гарантировать достоверность данных. Вот вопрос имеет ли смысл этим заморачиваться, или пока не нашли способа манипулировать пропами объекта player на клиенте?
 

Fumarie

Активный участник
27 Июн 2024
81
29
40
23
Вопрос не в авторизации пользователя, а в авторизации данных. Вопрос в том, что доступ до объекта player есть на клиенте.
Предполагаю, что поковырявшись можно найти способ подмены данных.
Например типа player, и прочих данных. JWT же благодаря подписи header и payload сертом, я могу гарантировать достоверность данных. Вот вопрос имеет ли смысл этим заморачиваться, или пока не нашли способа манипулировать пропами объекта player на клиенте?
На клиенте копия данных, пришедших с сервера, манипуляция ими меняет их внутри клиента, но на сервере они остаются исходными.
 

Fumarie

Активный участник
27 Июн 2024
81
29
40
23
То что ты разобрался что такое JWT это клево, но это не значит что теперь нужно всё вокруг им подписывать, все яд и всё лекарство, как говорится.
 
  • Like
Реакции: Inoi

Inoi

/dev/null
VIP
15 Окт 2020
3,383
2,128
208
35
Вопрос не в авторизации пользователя, а в авторизации данных. Вопрос в том, что доступ до объекта player есть на клиенте.
Предполагаю, что поковырявшись можно найти способ подмены данных.
Например типа player, и прочих данных. JWT же благодаря подписи header и payload сертом, я могу гарантировать достоверность данных. Вот вопрос имеет ли смысл этим заморачиваться, или пока не нашли способа манипулировать пропами объекта player на клиенте?
Я так и подумал что это гениальная идея античита
Как ты себе это представляешь?
Токен придётся где-то хранить на клиенте - очевидно в дате плеера.
Экзекутором ничего не "подменяют" - просто вызывают серверные евенты.
Человек будет точно так же вызывать их, твой сервис будет проверять токен - который у пользователя есть, потому что ты сам его ему выдал.
Ну типа, профит нулевой

Для всех этих случаев просто используются проверки на сервере, которым никакая токенизация не нужна
А это как кариес через прямую кишку лечить
 
Последнее редактирование:

Swayze

Начинающий специалист
6 Окт 2022
66
16
45
Я так и подумал что это гениальная идея античита
Как ты себе это представляешь?
Токен придётся где-то хранить на клиенте - очевидно в дате плеера.
Экзекутором ничего не "подменяют" - просто вызывают серверные евенты.
Человек будет точно так же вызывать их, твой сервис будет проверять токен - который у пользователя есть, потому что ты сам его ему выдал.
Ну типа, профит нулевой

Для всех этих случаев просто используются проверки на сервере, которым никакая токенизация не нужна
А это как кариес через прямую кишку лечить
Дополню чуток, экзекютором подменят данные на какого-то админа, вызвут серверный ивент и снесут тебе сервер
 
  • Durka
Реакции: Fumarie и DaVilka

Inoi

/dev/null
VIP
15 Окт 2020
3,383
2,128
208
35
Дополню чуток, экзекютором подменят данные на какого-то админа, вызвут серверный ивент и снесут тебе сервер
Если чесна я не настолько хорошо знаю как работает экзекьют и что он может подменить, знаю только про вызовы ремоут евентов.
От этого в целом ты защищаешься просто проверками на каждом + инкапсуляцией клиентского кода и каким-нибудь переименованием самого колл_ремоут.
Понятно что последнее - защита скорее от дурачка, но почему бы и нет.
А так просто проверочки на серваке.

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

Но это всё равно идиотизм, потому что дополнительными валидациями на серверных евентах ты всё это можешь пресечь без jwt или любых других аналогов.
Я просто не понимаю в чём смысл.

Всё что можно подменить - ты просто буквально ифом проверяешь на удалённом евенте на сервере.
Токены это ж ну там, авторизированную сессию хранить пол года, в целом вообще различать пользователей как-то, ну в вебе обычно, ну вот это вот всё
Как раз для случаев где у тебя никаких валидаций больше нет кроме токена и ты не ебёшь от кого запрос
А тут то
Ну типа
Не могу просто понять

1722080573304.png
 

Fumarie

Активный участник
27 Июн 2024
81
29
40
23
Под капотом у рейджа считайте тот же самый JWT токен для авторизации запросов, скорее всего какой-то аналогичный метод, не суть. Авторизация запроса (проверка тот ли клиент, за кого себя выдает) уже происходит из коробки, поэтому ничего доп проверка дать не может.

Если ты слепо доверяешь данным которые прислал клиент, то хоть 10 JWT, повесь, у тебя будут дыры в безопасности. И я говорю не про то, что запрос имитирует запрос от айди админа, а просто про то что игрок с клиента тебе присылает "я Вася и я админ, хочу всех забанить", а ты не проверяешь, админ ли он на самом деле, в базе / кеше на сервере и даёшь ему доступ к админ функционалу.

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

Summary: смысла ровно 0
 
  • OK
Реакции: Inoi