Защита клиентского API - PullRequest
4 голосов
/ 27 апреля 2011

Я создаю серверный API и клиентскую библиотеку для игры на основе JavaScript, в которой должны быть защищены две очень важные функции.

  1. Пользователь должен списываться за каждую игру
  2. Мы должны убедиться, что полученный счет является фактическим заработанным счетом игрока.

Решение первой проблемы кажется простым; в начале каждой игры мы нажимаем API, дебетуем учетную запись пользователя и возвращаем уникальный идентификатор игры. Когда мы представляем счет пользователя за эту игру, мы передаем ID, выданный в начале.

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

Для дополнительного контекста я планирую построить API на стороне сервера в Ruby.

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

Редактировать: Ответ Гомера6 ниже является очень хорошим решением для более сложных игр, но, к сожалению, простота этой игры не заслуживает такого метода. Это очень короткая игра, основанная на времени, поэтому счет - это всего лишь время, необходимое для прохождения уровня.

Ответы [ 5 ]

6 голосов
/ 27 апреля 2011

Сделать серверную часть игры.

Вы можете заставить API получать только действия в игре. Таким образом, оценка проводится на стороне сервера. Хотя это будет более интенсивно, подделать сложнее .

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

НТН

4 голосов
/ 27 апреля 2011

Как правило, просто предположите, что все на стороне клиента может быть подделано.

2 голосов
/ 28 апреля 2011

Скачать библиотеку as3corelibПусть сервер сгенерирует ключКлюч будет основан на сеансе и также истечет X количество минутВсе данные на сервер и с сервера будут зашифрованы с помощью этого ключа

Тот факт, что данные зашифрованы ключом, который обесценивает их, делает их намного более безопасными.

1 голос
/ 27 апреля 2011

Я бы посоветовал вам продолжить работу с флэш-компонентом и использовать хороший флэш-SWF-шифратор, чтобы обезопасить его от декомпиляции.Это может помочь: http://asgamer.com/2009/why-how-to-encrypt-your-flash-swf

0 голосов
/ 27 апреля 2011

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

<action type="1" score="+3" totalscore="3" gamestate="depends on the game"/>
<action type="4" score="+1" totalscore="4" gamestate="depends on the game"/>

и создайте алгоритм проверки на стороне сервера. однако перенос всей игровой логики на сервер намного безопаснее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...