Войти
ПрограммированиеФорумВеб

Защита переменной от изменения без сервера

Страницы: 1 2 Следующая »
#0
15:54, 22 авг 2022

Всем привет!

Дано: игрушка в браузере, на js, бекенда нет, кроме таблицы лидеров.
Юзеры набирают очки в процессе геймплея, затем эти очки улетают в таблицу лидеров.

Вопрос: какие есть способы максимально защитить эти очки от изменений, без серверной части?
Понятно, что переменную в js на 100% защитить невозможно, но хотя бы максимально усложнить процесс "взлома" юному любителю условного "артмани".

#1
18:50, 22 авг 2022

Так если какой-то сервер всё-таки есть, зачем тебе эта возня?
Отправляй эту переменную на сервер и контролируй как-то по минимуму.

#2
18:51, 22 авг 2022

по коду пройдись минификатором, а на сервере без подписи не принимай данные.
мамкины хакеры это не обойдут.

Код у тебя написан не на глобалах надеюсь?) Ну там хотя бы ООП или ECS?

#3
18:57, 22 авг 2022

Mephistopheles

> по коду пройдись минификатором
На каждый минификатор есть бьютифаер.
> а на сервер без подписи не принимай данные.
Какая именно подпись? И это уже server-side валидация.

#4
19:05, 22 авг 2022

Der FlugSimulator
> На каждый минификатор есть бьютифаер.
вопрос был как защитить от юных и хитрожопых, да и какой бы бьютифаер умный не был он не восстановит имена. Максимум отформатирует.
Der FlugSimulator
> Какая именно подпись? И это уже server-side валидация.
Желательно, но не обязательно. Можно подпись хранить там же где и "лидеров", а на выводе отфильтровать тех что не сходятся. Можно отдельно топ читеров выводить:)
Да и еще зависит от того где хранится это все, много субд умеют прехуки, ну или хранимки если там настоящая субд.

#5
19:24, 22 авг 2022

TirexiK
Можно попробовать виртуальную машину. Интерпретатор условного https://en.wikipedia.org/wiki/Brainfuck и игровая логика на нем. При желании в несколько слоёв.

#6
20:08, 22 авг 2022

Der FlugSimulator
> Так если какой-то сервер всё-таки есть, зачем тебе эта возня?
> Отправляй эту переменную на сервер и контролируй как-то по минимуму.

Сервер не свой, доступа к нему нет, это на стороне площадки, где паблишится игруля. Всё что можно - отправлять туда данные, и получать списки лидеров.

Mephistopheles
> Код у тебя написан не на глобалах надеюсь?) Ну там хотя бы ООП или ECS?
Да, ECS и ООП юзаются.

> Да и еще зависит от того где хранится это все, много субд умеют прехуки, ну или
> хранимки если там настоящая субд

Увы, нет доступа к серваку, кроме как отправить json, получить json

CD
> Можно попробовать виртуальную машину. Интерпретатор условного

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

#7
20:10, 22 авг 2022

Mephistopheles
> по коду пройдись минификатором
Это есть, собираю прод версию webpack, там можно всякие минификаторы подключать типа uglify-js, да вроде и стандартного вебпаковского хватает.

#8
20:27, 22 авг 2022

Пиши программы так, чтобы самому не понимать каким чудом они работают ;) Тогда и посторонний ничего не поймет. Трудно найти смысл там, где его не было изначально...

#9
21:49, 22 авг 2022

TirexiK
> Юзеры набирают очки в процессе геймплея, затем эти очки улетают в таблицу
> лидеров.
>
> Вопрос: какие есть способы максимально защитить эти очки от изменений, без
> серверной части?
Ну ты можешь вести подсчет очков несколькими способами одновременно.
В какой то момент сравнивать, если разница не будет совпадать - значит поправили в каком ни будь артмани.
Ну и ты этот результат тупо не засчитываешь.

Пример: переменная Score начинается с 0, паременная Control c 737 = что у тебя тоже будет считаться за 0.
В конце ты от Control отнимешь Score, если = 737 гут, нет свободен.
Ну и можно усложнять.

Или например делать контрольный срез, если собрали какое то колличество чего то = проверь равно ли оно контрольной сумме. Типо за 5 бананов можно получить только 250 очков, если очков больше = тебя обманули.

Можешь перед началом уровня (раунда) высчитывать максимальное колл-во очков, которое можно набрать = больше - свободен.

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

И так не всю игру, а отдельные контрольные этапы.

Главное себя не перехитри :)

#10
21:57, 22 авг 2022

Кроме очков можно добавить другие параметры, например, время потраченное на игру. Если игрок набрал много очков за 10 сек, то читер. Разумеется, эти параметры тоже могут подобрать, но хоть как-то усложнят процесс взлома.

#11
21:58, 22 авг 2022

Alexand3r
> Кроме очков можно добавить другие параметры, например, время потраченное на
> игру. Если игрок набрал много очков за 10 сек, то читер. Разумеется, эти
> параметры тоже могут подобрать, но хоть как-то усложнят процесс взлома.
++

#12
22:09, 22 авг 2022

Ну если совсем от мамкиных  хацкеров. Разминусуй на несколько флотов. В целой части очки, в дробной какую нибудь проверочку из простой математики придумай. Итоговоя сумма в остатке не больше 0.5 к примеру. Для визуализации сумму собирай в инты. Периодически сравнивай и хвосты у флотов чекай.

#13
22:15, 22 авг 2022

И самое главное, когда ты понял что тебя обманули - дай поиграть еще минут 5 а потом молча закрой программу, пусть думают что они что то сломали.
На Денди была какая то часть черепашек ниндзя, там игра если определяла что она взломана и скопирована, не давала убить Супер Шредера. В результате её не могли пройти.

#14
14:58, 23 авг 2022

563
Alexand3r
Vasara
Спасибо, гайз! Очень дельные советы, пошёл реализовывать.

Страницы: 1 2 Следующая »
ПрограммированиеФорумВеб

Тема в архиве.