Я создаю серверный API и клиентскую библиотеку для игры на основе JavaScript, в которой должны быть защищены две очень важные функции.
- Пользователь должен списываться за каждую игру
- Мы должны убедиться, что полученный счет является фактическим заработанным счетом игрока.
Решение первой проблемы кажется простым; в начале каждой игры мы нажимаем API, дебетуем учетную запись пользователя и возвращаем уникальный идентификатор игры. Когда мы представляем счет пользователя за эту игру, мы передаем ID, выданный в начале.
Второй меня немного озадачил. Первоначально я рассмотрел алгоритм хеширования на стороне клиента, основанный на идентификаторе и оценке, но быстро понял, что Javascript, который создает хеш, можно легко перепроектировать, даже если он был запутан. В этот момент я рассмотрел небольшой компонент флэш-памяти, который генерирует хэш, но я слышал, что даже скомпилированную флэш-память можно декомпилировать.
Для дополнительного контекста я планирую построить API на стороне сервера в Ruby.
Мне бы очень хотелось услышать любые предложения, которые умные программисты Stack Overflow могут предложить. Спасибо за ваше время!
Редактировать: Ответ Гомера6 ниже является очень хорошим решением для более сложных игр, но, к сожалению, простота этой игры не заслуживает такого метода. Это очень короткая игра, основанная на времени, поэтому счет - это всего лишь время, необходимое для прохождения уровня.