html 5 игр: могу ли я как-нибудь защитить код, чтобы сама игра не менялась во время игры? - PullRequest
5 голосов
/ 02 августа 2010

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

могу ли я сделать html5-игру достаточно безопасной, чтобы люди не могли изменять свой счет и другие переменные во время игры?

спасибо!

Ответы [ 4 ]

8 голосов
/ 03 августа 2010

Нет «зависит», прямой ответ на ваш вопрос «нет», и я думаю, что мои коллеги-ответчики просто замутили воды.

Вы не можете доверять клиенту.С любым языком, пишете ли вы на ассемблере, HTML или Flash, вы не можете доверять клиенту .Независимо от того, сколько вы оберните ваш код в обфускацию и тому подобное, он может и будет выяснен (и часто быстрее, чем вы думаете).получить немного от этого.Онлайн-игры становятся «скоростными», потому что они не проверяют скорость игроков, или они дублируют предметы, потому что они не проверяют, есть ли у игрока предмет, с которым он пытается что-то сделать, или слабая вспышкаигры получают записи из 9999999, потому что простой инструмент, такой как Tamper Data (дополнение Firefox) - это все, что нужно для изменения счета при отправке на сервер.

Вы можете 'Не доверяйте клиенту, будь то HTML5 или Flash.

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

2 голосов
/ 02 августа 2010

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

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

Возможно, постоянный мониторинг счета через сервер сможет обнаружить любые невозможные изменения. тем не менее, кто-то обманывает в сферах «возможных» результатов, не может быть пойман.

В конце концов, я бы сказал, что обмануть вас может быть довольно сложно, но это не невозможно для человека с небольшим навыком.

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

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

flash доставляет скомпилированные SWF-файлы, , которые нельзя (начиная с Flash 9) декомпилировать в полезным.smth так что вы можете поставить там секрет, который вы используете, чтобы подписать счет. то есть отправьте счет и md5 счета + секретный ключ. поэтому сервер (который также знает ключ, может проверить его). кроме того, с переменными flash не так просто справиться (вам придется найти их в ram и изменить их там, что является очень сложной задачей), в то время как переменные javascript можно легко редактировать с помощью, например, инструментов разработчика webkit

обновление

на самом деле я исправляю себя => все swfs могут быть декомпилированы это просто оставляет нам код, запутывающий и «шифрующий»

Полагаю, мир - плохое место, в конце концов;)

1 голос
/ 13 декабря 2013

Одна мысль !!

Вы можете использовать Knockout.js, чтобы изменить свой счет и другие переменные в качестве наблюдаемых свойств.Шаги:

  1. Создание ViewModal для вашей игры
  2. Создание наблюдаемых свойств для всех переменных (т. Е. Счет)
  3. Вам необходимо сохранить счет в кеше, чтобычто вы можете получить к нему доступ при получении нового счета.
  4. Прикрепить пользовательского подписчика к этим свойствам и написать логику, чтобы проверить, что счет должен обновляться единицами за раз (под единицей, я имею в виду, как вы думаетеобновлять счет пользователя за раз).Разница между последним и текущим счетами не должна выходить за рамки «UNIT»
  5. , как ViewModal.Score (newScore);// это вызовет событие для подписчика наблюдаемого свойства.!
1 голос
/ 02 августа 2010

Зависит от того, как закодирована ваша игра, но если вся логика отправлена ​​клиенту и возвращен только счет, у вас нет надежды. Только вернув входные данные и рассчитав оценку на стороне сервера, вы можете попытаться запретить пользователям отправлять любые оценки, которые они пожелают.

Не забывайте, что по определению пользователь должен изменить свой счет, иначе он не может быть больше 0 ...

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