Журнал транзакций javascript для проверки на стороне сервера

В игре, написанной на стороне клиента (js), но в которой есть многопользовательские элементы, такие как таблица лидеров. Как лучше всего записывать действия пользователей в журнал транзакций с отметками времени для проверки целостности отправленных данных и как вы проверяете действия в этом журнале?

Нужно ли вообще это делать, или будет достаточно написать хеш-функцию, которая отправляет оценки на сервер и обфускации кода, когда дело доходит до такого рода предотвращения читерства?

edit - описание игры:

В этой игре вы ходите по карте длиной 50 плиток. На каждой плитке вы можете встретить врагов / города / события (найти монету и т. д.). Каждый раз, когда вы достигаете конца карты, загружается новая карта с немного более высокой сложностью. Эта сложность сохраняется (с использованием PHP на базе данных MYSQL) вместе с игроком и его предметами, которые покупаются в городах. У предметов есть сила int в зависимости от их характеристик (урон / здоровье / защита и т. д.). Сила предметов суммируется и также сохраняется.

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

Не могли бы вы дать немного больше контекста, возможно, фрагмент кода того, чего вы пытаетесь достичь, потому что это немного расплывчато ... Какие действия вы пытаетесь проверить? Движение, счет, в чем смысл вашей игры?

MathieuAuclair 14.08.2018 01:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
72
1

Ответы 1

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

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

Журнал транзакций не поможет, потому что кто-то может легко изменить данные непосредственно перед их отправкой в ​​журнал транзакций или даже отключить ведение журнала.

Обфускация - это в основном безопасность через безвестность, что затруднит взлом вашего кода, но определенно не сделает его безопасным для читерства.

И снова, вы никогда не можете доверять никаким данным, которые поступают от клиента, поэтому вам понадобится серверная часть, чтобы либо контролировать весь игровой процесс, либо проверять данные.

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

Yeldar Kurmangaliyev 14.08.2018 01:40

Отредактирую исходный вопрос с описанием игры.

Levi 14.08.2018 08:45

@Levi согласно вашему обновлению, похоже, что вы почти все делаете на бэкэнде. Почему бы вам не внедрить табло и в бэкэнд? У вас есть все необходимые данные в вашей базе данных.

Yeldar Kurmangaliyev 14.08.2018 11:13

Вся бизнес-логика происходит на стороне клиента, функциональность, о которой я говорю в редактировании, в основном просто отправляет объект игрока в базу данных в виде json.stringified, который содержит все необходимое для результатов в таблице лидеров, возможно, я не достаточно ясно понимал это. Это определенно не в основном серверная часть, строка отправляется обратно клиенту. Затем клиент преобразует строковый объект в новый объект игрока с этими значениями в качестве способа загрузки персонажа.

Levi 14.08.2018 17:52

Другие вопросы по теме