В игре, написанной на стороне клиента (js), но в которой есть многопользовательские элементы, такие как таблица лидеров. Каков наилучший способ записи действий пользователей в журнал транзакций с отметками времени для проверки целостности представленных данных и как вы будете проверять действия внутри этого журнала?
Нужно ли это делать или будет достаточно написать хеш-функцию, которая отправляет результаты на сервер и запутывает код, когда дело доходит до такого рода мошенничества?
edit — описание игры:
В этой игре вы идете по карте длиной 50 плиток. На каждой плитке вы можете встретить врагов / города / события (найти монеты и т. Д.). Каждый раз, когда вы достигаете конца карты, новая карта загружается с немного большей сложностью. Эта трудность сохраняется (с использованием PHP на базе данных MYSQL) вместе с игроком и его предметами, которые покупаются в городах. Предметы имеют силу int в зависимости от их характеристик (dmg / hp / defense и т. Д.). Сила предметов суммируется, а также сохраняется.
Сила, уровень (сложность) и имя пользователя — это то, что отображается в таблице лидеров для 10 лучших игроков, отсортированных по наибольшей мощности.
В общем, нет эффективного способа предотвратить обман на стороне клиента.
Что касается списков лидеров и пользователей, публикующих свои оценки, единственный способ предотвратить мошенничество — это обработать данные на сервере или хотя бы попытаться проверить их там.
Хэширование данных перед отправкой на сервер не поможет, потому что кто-то может легко изменить данные непосредственно перед хэшированием.
Журнал транзакций не поможет, потому что кто-то может легко изменить данные непосредственно перед отправкой в журнал транзакций или даже отключить ведение журнала.
Запутывание в основном безопасность через неизвестность что сделает ваш код более трудным для взлома, но определенно не сделает его чит-безопасным.
И опять же, вы никогда не можете доверять никаким данным, полученным от клиента, поэтому вам понадобится серверная часть, чтобы либо контролировать весь игровой процесс, либо проверять данные.
Других решений пока нет …