Подтвердить что ты не робот

Решения для защиты многопользовательской игры HTML5

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

В начале каждой игры плата 4x4 создается на стороне сервера. Создается список возможных слов для этой доски, и хешированная версия (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, чтобы опубликовать счет. Voila:)

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

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