Решения для безопасности многопользовательских игр HTML5 - PullRequest
12 голосов
/ 05 июня 2010

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

Ответы [ 2 ]

16 голосов
/ 05 июня 2010

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

Поскольку клиент программного кода доступен для любого просмотра, нет способа доверять данным, которые клиент отправляет на ваш сервер. Даже если вы зашифруете данные с помощью ключа шифрования для каждого пользователя (что возможно), пользователь может просто изменить свой код в браузере и изменить значения, отправляемые на сервер.

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

Вам все равно придется иметь дело с мошенничеством, что еще более сложно, но это еще одна проблема ...

4 голосов
/ 19 сентября 2012

В дополнение к тому, что сказал Ларри, вам определенно придется обрабатывать подсчеты на бэкэнде, чтобы действительно предотвратить мошенничество / фальшивые записи.

В качестве примера на практике ... Игра Word Wars - это игра в духе ошеломления, в которой вы можете найти как можно больше слов из сетки букв 4х4.

В начале каждой игры на сервере создается доска 4х4. Создается список возможных слов для этой доски, и хэшированная версия (md5'd со случайной солью) каждого слова, а также соль передается клиенту.

На стороне клиента, когда набираются буквы и нажимается клавиша ввода, мы вводим md5 (с солью с сервера) введенное слово и проверяем его по списку хешированных слов, предоставленных сервером. Если это совпадение, мы обновляем клиента новым счетом (есть функция, основанная на используемых буквах и их значениях баллов).

Как только игра заканчивается, клиент отправляет на сервер список слов, которые он придумал (НЕ счет), и сервер дважды проверяет, что эти слова присутствовали на доске, и обрабатывает подсчет очков.

Здесь Clay.io, компания, в которой я работаю. Clay.io предлагает API для высокоуровневых функций HTML5-игр, таких как таблицы лидеров, достижения, обработка платежей и т. Д. Излишне говорить, что нам нужно решение для игр, в которых есть бэкэнд, чтобы сделать некоторые вещи, такие как высокие результаты, более безопасными.

Решением было зашифровать объекты JavaScript на серверной части (node.js, php и т. Д.) С помощью JWT (JSON Web Token) и передать этот зашифрованный объект, а не сам счет. Это позволяет нам общаться обоими способами (игра -> Clay.io и Clay.io -> игра), и это довольно безболезненно. Полные документы по этому вопросу находятся здесь: clay.io / docs / encryption (максимальное количество ссылок на этот ответ)

Назад к Word Wars ... с сервера мы генерируем этот JWT со счетом пользователя и передаем его в Clay.io для публикации счета. Вуаля:)

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

Я написал пост в блоге, в котором более подробно рассказывается о безопасности игры HTML5. Часть 3 из серии, посвященной HTML5. Советы по разработке игр .

...